python實現資料離散化
阿新 • • 發佈:2018-12-22
資料探勘中有些演算法,特別是分類演算法,只能在離散型資料上進行分析,然而大部分資料集常常是連續值和離散值並存的。因此,為了使這類演算法發揮作用,需要對資料集中連續型屬性進行離散化操作。
那麼,如何對連續型屬性離散化呢?常見的有等寬分箱法,等頻分箱法:
等寬分箱法的思想是,將資料均勻劃分成n等份,每份的間距相等。
等頻分箱法的思想是,將觀察點均勻分成n等份,每份的觀察點數相同。
在對資料離散化前,需要先處理異常點敏感問題,即我們需要首先設定一個閾值將異常資料移除。有兩種思路:
1.設定閾值為90%,將資料從小到大排序,移除全部資料最小的5%和最大的5%資料
2. 設定閾值為90%,將資料從小到大排序,然後對所有資料求和,並計算每個資料佔總和的比例,移除佔比10%的資料
在這裡,我們實現的方法是等寬分箱法,針對連續型資料集,程式碼比較簡單基礎,在此拋磚引玉,大家可以在程式碼的基礎上增添自己需要的功能。
def dataDiscretize(dataSet): m,n = shape(dataSet) #獲取資料集行列(樣本數和特徵數) disMat = tile([0],shape(dataSet)) #初始化離散化資料集 for i in range(n-1): #由於最後一列為類別,因此遍歷前n-1列,即遍歷特徵列 x = [l[i] for l in dataSet] #獲取第i+1特徵向量 y = pd.cut(x,10,labels=[0,1,2,3,4,5,6,7,8,9]) #呼叫cut函式,將特徵離散化為10類,可根據自己需求更改離散化種類 for k in range(n): #將離散化值傳入離散化資料集 disMat[k][i] = y[k] return disMat