连续特征离散化的应用总结


  李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。
  离散特征是可枚举的特征,连续特征是不可枚举的特征,在《机器学习中的特征变量及处理总结》中提到了连续特征变量对机器学习算法不友好,所以需要进行离散化。

1. 什么是连续特征离散化

  sk-learn文档上对离散化的定义:离散化(也称为量化或合并)提供了一种将连续特征划分为离散值的方法。
  我理解“连续特征离散化”与电子信息方面的“模拟信号数字化”有异曲同工之妙。我们知道计算机底层是0/1编码表示所有的数据,所以本质上是没法存储和处理模拟信号的,只能通过数字化使得处理达到一定的精度。
  我们将连续特征离散化,也是为了更好的使用机器学习算法对数据进行处理。

2. 为什么要离散化

  对于机器学习算法而言,连续特征还是离散特征本质上没有什么区别,因为算法只认你是数值。比如对于基本线性回归y=ωx+by = \omega*x+bxx是特征矩阵,至于里边的数值代表的是离散特征还是连续特征,算法并不关心。
  那么为什么还要进行离散化呢?这其实就是特征工程的一部分,比如对于定类特征变量而言,类别1,2,3 如果简单的当作一个特征处理,会失去很多有效信息,所以通过one-hot编码增加了特征的维度。变成了y=w1x1+w2x2+w3x3+by = w1*x1 + w2*x2 +w3*x3 +b。经过离散化的处理,类别信息就变成了3各彼此正交的特征,各自有独立的权重,相对y=ωx+by = \omega*x+b就有了更强的表达能力,所以离散化可以看作是人为的为了提高模型性能的特征工程的一部分
  其次,比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。

1.1 离散化的优点

  1. 引入非线性,提升模型表达能力
      关于引入非线性参考博客《特征离散化解决非线性特征问题》,可以看到一次线性回归可以通过离散化特征描述二次曲线。
    连续特征离散化的应用总结
      图中,左边的y=kx+by=kx+b没法表达二次曲线,但是右边通过离散化特征,增加特征维度得到y=k1x1+k2x2+k3x2+...+knxn+by=k1x1+k2x2+k3x2+...+knxn+b,就可以拟合二维曲线,因此增加了非线性。

  2. 增加了模型的鲁棒性,降低模型过拟合的风险
      比如年龄大于30用1表示,小于30用0表示。则如果出现了300岁,则模型不受影响,反之如果作为连续特征处理,则会导致异常。

  3. 离散特征增删容易,易于模型迭代

  4. 生成稀疏矩阵,向量化运算快速,方便结果的存储

  5. 离散化后特征进行特征组合(特征交叉),M+N个特征可以组合成M*N个特征,进一步引入非线性。

1.2 离散化缺点

  由于连续特征离散化,在引入非线性的同时,可能导致维度灾难,后边将写一篇文章讲述一下维度灾难的产生和特征选择。

1.3 LR模型为什么适合离散特征

  CTR预估中常常使用LR模型,而其特征都是离散的,那么为什么要这样?
参考知乎周开拓的回答。

  1. LR(逻辑回归)本质上广义线性模型,线性模型表达能力有限,所以逻辑回归通过sigmoid函数引入了非线性,而单变量离散化为N个特征之后就进一步引入了非线性。

  2. 根据没有“免费的午餐”理论,凡机器学习问题解决模型,必有假设。如果假设与问题和数据相符则work。LR模型假设:
    (1) 局部平坦性,在自变量x0x0的小邻域内,因变量yy变化也不会太大。
    (2)不规律性,两者关心不是严格的线性关系,否则直接线性回归就好。

  3. LR 模型使用一般配合海量的离散特征,因此适合并行计算。

3. 怎么离散化

  我们知道“连续特征离散化”类似“模拟信号数字化”,模拟信号数字化的过程关键在于:
连续特征离散化的应用总结
  类比到连续特征离散化,采样对应的是区间分段,量化对应了对该区间内的值进行计算(与直方图区别,直方图考察个数,这里边考察值),编码类似LabelEncode或者one-hot编码

3.1 无监督学习方法

sk-learn中有KBinsDiscretizer可以实现离散化,不同的参数对应了不同的方法。

  1. 等宽法
      等宽法即是将特征变量分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如属性值在[0,60]之间,最小值为0,最大值为60,我们要将其分为3等分,则区间被划分为[0,20] 、[21,40] 、[41,60],每个属性值对应属于它的那个区间。
      对应到pandas当中使用cut函数。

  2. 等频法
      等频法,按照样本数量均匀划分,保证每段样本数量一致。比如有60个样本,我们要将其分为k=3部分,则每部分的长度为20个样本。
      对应到pandas当中使用qcut函数。

参考 《pandas的cut,qcut函数的使用和区别》。

  1. 基于聚类的方法
    基于聚类的方法分为两个步骤,即:
    (1)选定聚类算法将其进行聚类
    (2)将在同一个簇内的属性值做为统一标记。
    :基于聚类的方法,簇的个数要根据聚类算法的实际情况来决定,比如对于k-means算法,簇的个数可以自己决定,但对于DBSCAN,则是算法找寻簇的个数。

3.2 有监督学习方法

  1. 1R方法
  2. 基于信息熵的方法
  3. 基于卡方的方法

参考sk-learn特征离散化