特征离散化方法
一般在搭建机器学习分类模型时,需要对连续型的特征进行离散化,也就是分箱。在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为0、1特征输入,这样做的优势有:
1.离散特征的增加和减少都很容易,易于模型的快速迭代;
2.稀疏向量的内积算法运算快;
3.离散化的特征对异常数据有很强的鲁棒性,比如年龄>30置为1,年龄300岁会对模型产生很大干扰;
4.逻辑回归属于广义线性模型,表达能力受限。单个连续特征离散为N个后,每个变量有单独的权重,相当于引入模型的非线性,加大拟合能力;
5.离散后作特征交叉,由M+N个特征可变为M*N个特征,进一步引入非线性;
6.离散的特征更加稳定,比如,20~30岁的人为同一类,不同因20变为21岁而成为不同的类;
7.连续型特征离散化后可降低过拟合的风险。
李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
1.无监督方法
(1)等距分箱
将特征的取值范围等间隔分割,从最小值到最大值之间,均分N等份,如果最小值和最大值分别为A、B,则每个区间的长度为W=(B-A)/N,则区间的边界为A+W,A+2W,A+3W,...,A+(N-1)W。这里只考虑边界,每个区间内的样本数量可能不同。
该方法对异常值比较敏感,比如远大于正常范围的数值会影响区间的划分;再者,比如对工资划分时,假设最高工资50000,划分五等份,则工资小于10000元的人划到一个区间,导致不同区间的人数差距较大。
(2)等频分箱
区间的边界值要经过选择,使得每个区间包含大致相等的实例数量。比如说 N=10 ,每个区间应该包含大约10%的实例。
2.有监督方法
(1)卡方分箱(ChiMerge)
参考:https://blog.csdn.net/pylady/article/details/78882220
自底向上的(即基于合并的)数据离散化方法。
它依赖于卡方检验:具有最小卡方值的相邻区间合并在一起,直到满足确定的停止准则。
基本思想:
对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。而低卡方值表明它们具有相似的类分布。
![](https://img.haomeiwen.com/i15137897/3e72a17e80a6d79a.png)
这里需要注意初始化时需要对实例进行排序,在排序的基础上进行合并。
1.卡方阈值的确定:根据显著性水平和自由度得到卡方值。自由度比类别数量小1。例如:有3类,自由度为2,则90%置信度(10%显著性水平)下,卡方的值为4.6。
2.阈值的意义:类别和属性独立时,有90%的可能性,计算得到的卡方值会小于4.6。 大于阈值4.6的卡方值就说明属性和类不是相互独立的,不能合并。如果阈值选的大,区间合并就会进行很多次,离散后的区间数量少、区间大。
注:
1、ChiMerge算法推荐使用0.90、0.95、0.99置信度,最大区间数取10到15之间.
2、也可以不考虑卡方阈值,此时可以考虑最小区间数或者最大区间数。指定区间数量的上限和下限,最多几个区间,最少几个区间。
3、对于类别型变量,需要分箱时需要按照某种方式进行排序。
(2)最优分箱
(未完待续。。。)