【特征工程】数据离散化方法

参考链接:

https://blog.csdn.net/programmer_wei/article/details/17200085

https://blog.csdn.net/zhangf666/article/details/79203197

为什么要进行离散化?

  1. 离散化特征的增加和减少都很容易,有利于模型的快速迭代;
  2. 可以有效地避免一些异常数据的干扰,降低数据波动的影响,提高抗噪声能力,模型结果更稳定;
  3. 一些算法的需要,如分类树、朴素贝叶斯算法等,是基于离散化数据展开的;
  4. 减小算法的空间和时间开销,起到简化模型的作用,降低过拟合的风险,提高系统的分类聚类能力;
  5. 离散后更便于进行特征交叉,进一步引入非线性,提高模型的表达能力;
  6. 离散后得到的特征向量是一个较为稀疏的向量,可以使一些问题变得线性可分;并且稀疏向量内积乘法运算速度快,计算结果易于存储,易扩展;
  7. 对于像逻辑回归这样的广义线性模型来说其表达能力受限,离散后每个变量取值相当于有单独的权重,进入非线性,加大模型拟合;
  8. 离散化后的特征相对于连续型更易理解,更接近知识面上直观地表达。

【特征交叉】 

参考:1、2

特征交叉对于线性模型可以学习到非线性特征。

连续特征可以交叉,离散也可以交叉,离散就是笛卡尔积,比如特征A有三个属性,B有2个属性就可以生成6个特征,假设都是连续的那就可以直接乘或者转变一下,还有可以离散加连续反正各种交叉

 离散化方法:

根据数据是否包含类别信息可以把它们分成有监督的数据和无监督的数据。有监督的离散化要考虑类别信息无监督的离散化则不需要

1. 非监督离散

1.1 等宽法

根据属性的值域来划分,使每个区间的宽度相等。

缺点是:容易受离群点的影响而使性能不佳。

1.2 等频法

根据取值出现的频数来划分,将属性的值域划分成个小区间,并且要求落在每个区间的样本数目相等。

1.3 K-means聚类算法

首先由用户指定离散化产生的区间数目,K-均值算法首先从数据集中随机找出个数据作为个初始区间的重心;然后,根据这些重心的欧式距离,对所有的对象聚类:如果数据距重心最近,则将划归所代表的那个区间;然后重新计算各区间的重心,并利用新的重心重新聚类所有样本。逐步循环,直到所有区间的重心不再随算法循环而改变为止。


2. 监督离散

2.1 自上而下的分裂法

  • 判别标准:卡方检验

该分裂算法是把整个属性的取值区间当做一个离散的属性值,然后对该区间进行划分,一般是一分为二,即把一个区间分为两个相邻的区间,每个区间对应一个离散的属性值,该划分可以一直进行下去,直到满足某种停止条件,其关键是划分点的选取。

分裂步骤:
依次计算每个插入点的卡方值,当卡方值达到最大时,将该点作为分裂点,属性值域被分为两块。
然后再计算卡方值,找到最大值将属性值域分成三块。
停止准则:
当卡方检验显著时,继续分裂区间;
当卡方检验不显著时,停止分裂区间;

  • 判别标准:信息熵/信息增益

分裂步骤:
首先将属性的取值值域按照值得大小排序。 把每个值看作是可能的分割点,依次把区间分成两部分计算它们的熵值,取熵值最小/信息增益最大的作为第一次划分点。 
然后选取一个区间,通常选择熵值最大的区间重复此过程。 
区间个数达到用户指定的个数满足指定的终止条件则停止继续分裂。

2.2 自下而上的合并法

  • 判别标准:卡方检验

ChiMerge算法是一种基于卡方值的自下而上的离散化方法。和上一种算法正好相反。

分裂步骤:
第一步:根据要离散的属性对实例进行排序:每个实例属于一个区间
第二步:合并区间,计算每一对相邻区间的卡方值
停止准则:
当卡方检验不显著,继续合并相邻区间;
当卡方检验显著,停止区间合并;

 

 

 

 

你可能感兴趣的:(机器学习)