#資料規範化
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特徵交給邏輯回歸模型,這樣做的優勢有以下幾點 離散特徵的增加和減少都很容易,易於模型的快速迭代 這個點理解 稀疏向量內積乘法運算速度快,計算結果方便儲存,容易擴充套件 離散化後的特徵對異常資料有很...