前言
在做数据挖掘模型的时候,我们有时会需要把连续型变量转型离散变量,这种转换的过程就是数据离散化,分箱就是离散化常用的一种方法。
数据离散化处理属于数据预处理的一个过程,R语言在数据处理上有天然的优势,也有直接用于离散化计算的包,无监督的离散化可以用infotheo包,有监督的离散化可以用discretization包来处理复杂的离散化操作。
目录
数据离散化的需求
无监督的数据离散化
有监督的数据离散化
1. 数据离散化的需求
数据离散化,教课书上面的定义是,把无限空间中有限的个体映射到有限的空间中。数据离散化操作,大多是针对连续型变量进行的,处理之后数据从连续型变量转变为离散型变量。
离散化处理的特点:
快速迭代,离散化的过程,离散特征增加和减少都很容易,易于扩展。
高效计算,稀疏向量内积乘法运算速度快,计算结果方便存储。
适应性,有些分类模型适合用离散化数据做为数据指标,比如决策树虽然支持输入连续型变量,但决策树模型本身会先将连续型变量转化为离散型变量,做逻辑回归时,也通常会先把连续型特征变量离散化,变成0或1。
鲁棒性,数据离散化会让特征变化不是特别明显,特别是对于降低异常数据干扰。
稳定性,牺牲了数据的微小变化,但保证了模型的稳定性。
过拟合,减少的数据信息,降低了过拟合的风险。
业务性,业务上已经定义出了离散值的含义,需要做离散化处理。
离散化处理通常对连续型变量进行处理,但同时也可以对离散型变量再进行离散化,适用于数据聚合或重新分组。
2. 无监督的数据离散化
我们可以无监督的数据离散化方法,进行数据的分箱操作,包括等宽分箱法、等频分箱法、通过kmeans分箱法等。
等宽分箱法,将观察点均匀划分成n等份,每份的间距相等。
等频分箱法,将观察点均匀分成n等份,每份的观察点数相同。
kmeans分箱法,先给定中心数,将观察点利用欧式距离计算与中心点的距离进行归类,再重新计算中心点,直到中心点不再发生变化,以归类的结果做为分箱的结果。
接下来,我们用R语言来实现上面提到的几种分箱的操作。
2.1 准备数据
本文所使用的系统环境
Win10 64bit
R: 3.2.3 x86_64-w64-mingw32/x64 b4bit
首先,生成一组数据,这组织通过3个正态分布的随机数进行叠加,主要用于体现分箱的不同特征。
# 设置随机数种子,生成符合正态分布N(0,1)的数据1000个点
> set.seed(0)
> a1
> set.seed(1)
> a2
> set.seed(2)
> a3
# 按顺序,合并3种数据
> aa
# 查看数据
> head(aa,30)
[1] 1.26295 -0.32623 1.32980 1.27243 0.41464 -1.53995 -0.92857 -0.29472 -0.00577 2.40465 0.76359
[12] -0.79901 -1.14766 -0.28946 -0.29922 -0.41151 0.25222 -0.89192 0.43568 -1.23754 -0.22427 0.37740
[23] 0.13334 0.80419 -0.05711 0.50361 1.08577 -0.69095 -1.28460 0.04673
画出数据的散点图,x轴为索引序号,y轴为值。
> plot(aa)
查看数据的分布形状,x轴为值,y轴为这个值出现的次数。
# 画出数据的直方图
> hist