您的位置:首页 > 编程语言 > Python开发

python实现数据离散化

2017-06-21 19:57 155 查看
数据挖掘中有些算法,特别是分类算法,只能在离散型数据上进行分析,然而大部分数据集常常是连续值和离散值并存的。因此,为了使这类算法发挥作用,需要对数据集中连续型属性进行离散化操作。

那么,如何对连续型属性离散化呢?常见的有等宽分箱法等频分箱法

等宽分箱法的思想是,将数据均匀划分成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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息