1. 程式人生 > >python實現資料離散化

python實現資料離散化

資料探勘中有些演算法,特別是分類演算法,只能在離散型資料上進行分析,然而大部分資料集常常是連續值和離散值並存的。因此,為了使這類演算法發揮作用,需要對資料集中連續型屬性進行離散化操作。

那麼,如何對連續型屬性離散化呢?常見的有等寬分箱法等頻分箱法

等寬分箱法的思想是,將資料均勻劃分成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