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


你可能感兴趣的:(特征预处理,数据挖掘,数据预处理,python)