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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章