連續變數離散化有三種方法
1.等寬離散化
2.等頻離散化
3.利用聚類進行離散化
import numpy as np
import pandas as pd
#引數初始化
datafile = './data/discretization_data.xls'
#讀取資料
data = pd.read_excel(datafile)
data = data[u'肝氣鬱結證型係數'].copy()
k = 4
#等寬離散化,各個模擬依次命名為0,1,2,3
d1 = pd.cut(data, k, labels = range(k))
#等頻率離散化
w = [1.0*i/k for i in range(k+1)]
#使用describe函式自動計算分位數
w = data.describe(percentiles = w)[4:4+k+1]
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是並行數,一般等於cpu數較好
kmodel.fit(data.values.reshape((len(data), 1))) #訓練模型
c = pd.dataframe(kmodel.cluster_centers_).sort_values(0)#輸出聚類中心,並且排序(預設是隨機序的)
print(np.shape(c))
print("-------------")
print(c)
w = pd.rolling_mean(c, 2).iloc[1:] #相鄰兩項求中點,作為邊界點
w = [0] + list(w[0]) + [data.max()] #把首末邊界點加上
print("*****************")
print(w)
d3 = pd.cut(data, w, labels = range(k))
#自定義作圖函式來顯示聚類結果
def cluster_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()
連續變數離散化的原因
資料離散化是指將連續的資料進行分段,使其變為一段段離散化的區間。分段的原則有基於等距離 等頻率或優化的方法。資料離散化的原因主要有以下幾點 比如決策樹 樸素貝葉斯等演算法,都是基於離散型的資料展開的。如果要使用該類演算法,必須將離散型的資料進行。有效的離散化能減小演算法的時間和空間開銷,提高系統對樣...
離散變數和連續變數
離散變數是指其數值只能用自然數或整數單位計算的則為離散變數.例如,企業個數,職工人數,裝置台數等,只能按計量單位數計數,這種變數的數值一般用計數方法取得.反之,在一定區間內可以任意取值的變數叫連續變數,其數值是連續不斷的,相鄰兩個數值可作無限分割,即可取無限個數值.例如,生產零件的規格尺寸,人體測量...
特徵的轉換 02 連續變數的離散化
今日記事 把頭髮高高盤起,畫上一字眉。工作後就少了太多銳氣,磨得圓滑尚且是好,但圓了就難免要缺失點篤定的方向,最怕滾來滾去,滾回起點。而方向越篤定,心越沉下來,難免要變得好安靜。binarizer是將連續型變數根據某個閥值,轉換成二元的分類變數。小於該閥值的轉換為0,大於該閥值的轉換為1.如下 輸入...