连续特征离散化的必要性

在什么情况下将连续的特征离散化之后可以获得更好的效果?

工业界中很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征,这样做的优点可以归纳为以下几点:

1. 特征鲁棒性更强

  • 离散化后的特征对异常值有很强的鲁棒性
    比如对于一个连续特征:年龄,如果直接将其作为特征,一个异常数据“年龄300岁”会给模型造成很大的干扰;如果离散为年龄>30为1,否则0。离散化后年龄300岁也会被归为0,如果训练数据中没有出现特征"年龄-300岁",那么在LR模型中,其权重对应于0,所以,即使测试数据中出现特征"年龄-300岁",也不会对预测结果产生影响。
  • 特征离散化后,模型会更稳定
    比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;按区间离散化,划分区间是非常关键的。

特征离散化的过程,比如特征A,如果当做连续特征使用,在LR模型中,A会对应一个权重w,如果离散化,那么A就拓展为特征A-1,A-2,A-3…,每个特征对应于一个权重,如果训练样本中没有出现特征A-4,那么训练的模型对于A-4就没有权重,如果测试样本中出现特征A-4,该特征A-4也不会起作用。相当于无效。但是,如果使用连续特征,在LR模型中,y = wa,a是特征,w是a对应的权重,比如a代表年龄,那么a的取值范围是[0…100],如果测试样本中,出现了一个测试用例,a的取值是300,显然a是异常值,但是wa还是有值,而且值还非常大,所以,异常值会对最后结果产生非常大的影响。

2. 特征表达性更丰富

  • 单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
    在LR模型中,特征A作为连续特征对应的权重是Wa。A是线性特征,因为y = WaA,y对于A的导数就是Wa,如果离散化后,A按区间离散化为A_1,A_2,A_3。那么y = w_1A_1+w_2A_2+w_3A_3.那么y对于A的函数就相当于分段的线性函数,y对于A的导数也随A的取值变动,所以,相当于引入了非线性。
  • 离散化后可以进行特征交叉,假如特征A 离散化为M个值,特征B离散为N个值,那么交叉之后会有M*N个变量,进一步引入非线性,提升表达能力;

3. 模型过拟合风险更低

  • 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
    当使用连续特征时,一个特征对应于一个权重,那么,如果这个特征权重较大,模型就会很依赖于这个特征,这个特征的一个微小变化可能会导致最终结果产生很大的变化,这样子的模型很危险,当遇到新样本的时候很可能因为对这个特征过分敏感而得到错误的分类结果,也就是泛化能力差,容易过拟合。而使用离散特征的时候,一个特征变成了多个,权重也变为多个,那么之前连续特征对模型的影响力就被分散弱化了,从而降低了过拟合的风险。

4. 模型迭代更快

  • 稀疏向量内积乘法运算快,计算结果方便存储,容易扩展;
  • 离散特征的增加和减少都很容易,易于模型的快速迭代
    离散特征的增加和减少,模型也不需要调整,重新训练是必须的,相比贝叶斯推断方法或者树模型方法迭代快

李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。

猜你喜欢

转载自blog.csdn.net/SkullSky/article/details/106267146