連續資料離散化

2021-08-20 10:50:10 字數 1462 閱讀 3628

#資料規範化

import pandas as pd

datafile = 'eeeee/chapter4/demo/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))

#聚類離散化

from sklearn.cluster import kmeans #引入kmeans

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

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

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

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

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

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

defcluster_plot

(d, k):

#自定義作圖函式來顯示聚類結果

import matplotlib.pyplot as plt

plt.rcparams['font.sans-serif'] = ['simhei'] #用來正常顯示中文標籤

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

#用來正常顯示負號

plt.figure(figsize = (8, 3))

for j in range(0, k):

plt.plot(data[d==j], [j for i in d[d==j]], 'o')

plt.ylim(-0.5, k-0.5)

return plt

cluster_plot(d1, k).show()

cluster_plot(d2, k).show()

cluster_plot(d3, k).show()

連續資料的離散化

1.分段類散 同步pandas.cut對值進行分段劃分,進行離散化。類散化後是分段的index。import pandas as pd data 1,3,6,20,50,100 w 0,10,50,100 v 5data cut1 pd.cut data,w,labels false data cu...

sklearn連續型資料離散化

設定乙個condition,把連續型的資料分類兩類。比如age,大於30,和小於30。from sklearn.preprocessing import binerize as ber x data 2.iloc 0 values.reshpe 1,1 提取資料 trans ber threshol...

連續特徵離散化

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