連續屬性離散化實現(pandas,sklearn)

2021-12-30 09:21:42 字數 1805 閱讀 3125

****:python資料分析與挖掘實戰

源**有如下錯誤:

line22: 原: data.reshape 修改後: data.values.reshape

line23: 原: sort(0) 修改後: sort_values(0)

line24: 原: pd.rolling_mean(c, 2).iloc[1:] 修改後: pd.dataframe.rolling(c, 2).mean().iloc[1:]

import pandas as pd

from sklearn.cluster import kmeans

import matplotlib.pyplot as plt

plt.rcparams['font.sans-serif'] = ['simhei']

plt.rcparams['axes.unicode_minus'] = false

datafile = '../data/discretization_data.xls'

data = pd.read_excel(datafile)

data = data[u'肝氣鬱結證型係數'].copy()

k = 4

d1 = pd.cut(data, k, labels=range(k)) #等寬離散化,各個模擬依次命名為0,1,2,3

#等頻率離散化

w = [1.0*i/k for i in range(k+1)]

w = data.describe(percentiles=w)[4:4+k+1] #使用describe函式自動計算分位數

w[0] = w[0]*(1-1e-10)

d2 = pd.cut(data, w, labels=range(k))

kmodel = kmeans(n_clusters=k, n_jobs=4) #建立模型,n_jobs是並行數,一般等於cpu數較好

kmodel.fit(data.values.reshape((len(data), 1))) #訓練模型

c = pd.dataframe(kmodel.cluster_centers_).sort_values(0) #輸出聚類中心,並且排序(預設是隨機排序的)

w = pd.dataframe.rolling(c, 2).mean().iloc[1:] #相鄰兩項求中點,作為邊界點

w = [0] + list(w[0]) + [data.max()] #把首末邊界點加上

d3 = pd.cut(data, w, labels=range(k))

def cluster_plot(d, k): #自定義做圖函式來顯示聚類結果

pandas 資料離散化

連續屬性離散化的目的是為了簡化資料結構,資料離散化技術可以用來減少給定連續屬性值的個數。離散化方法經常作為資料探勘的工具。連續屬性的離散化就是將連續屬性的值域上,將值域劃分為若干個離散的區間,最後用不同的符號或整數值代表落在每個子區間中的屬性值。離散化有很多種方法,這使用一種最簡單的方式去操作 這樣...

連續資料離散化

資料規範化 import pandas as pd datafile eeeee chapter4 demo data discretization data.xls 引數初始化 data pd.read excel datafile 讀取資料 data data u 肝氣鬱結證型係數 copy k...

連續特徵離散化

參考知乎使用者 在工業界,很少直接將連續值作為邏輯回歸模型的特徵輸入,而是將連續特徵離散化為一系列0 1特徵交給邏輯回歸模型,這樣做的優勢有以下幾點 離散特徵的增加和減少都很容易,易於模型的快速迭代 這個點理解 稀疏向量內積乘法運算速度快,計算結果方便儲存,容易擴充套件 離散化後的特徵對異常資料有很...