以下为综合转载。
连续特征离散化
有些特征虽然也是数值型的,但是该特征的取值相加相减是没有实际意义的,那么该数值型特征也要看成离散特征,采用离散化的技术。
连续特征离散化主要分为有监督方法与无监督方法。
无监督方法:
无监督方法都具有的问题就是都需要人为规定划分区间这个参数,常用的方法有分箱法和直观划分。
- 分箱法又分为等宽分箱法和等频分箱法,其实从名字就能看出算法的做法了,前者指定定长的间隔将特征放入不同箱子内,后者根据频率划分箱子,这两种做法都有一定的缺陷。
- 等宽分箱法对异常点比较敏感,比如数据正常范围是30-60,现在出现了一个特征本来是30不小心读取成了300,那么宽度会被拉长,实例就主要集中在前面的箱体中,后面的箱体几乎没有实例,解决的方法主要是设立阈值移除阈值以外的实例。
- 等频分箱法的缺陷是完全按照频率划分会出现实例特征相同却不在同一个箱体内的情况,解决办法也很简单,在划分完成后进行微调就可完成。
- 直观划分法感觉就没什么技术了,这个算法主要是根据经验和美观,常用的方法划分出来肯定都是34267、64537这样的数,但是人们一般都习惯看到30000、50000这样的数,然后就是加上个人对数据的了解人为划分。 如1-100岁可以划分为:(0-18)未成年、(18-50)中青年、(50-100)中老年。
个人感觉无监督方法的连续特征离散化并不是很靠谱,原因就是不知道设计的目的单纯考虑离散化对结果是更好还是更差这个不确定性太大了。
有监督方法:
- 1R方法:这个方法是分箱法的有监督版本,把前6个实例放入箱子中,然后后面实例放入箱子时,对比当前实例标签与箱子中大部分实例标签是否相同,如果相同放入,如果不相同,那么形成下一个6实例的新箱子,等到最后全部放入箱子中,将箱子中大多数实例标签作为箱子的标签,再将标签相同的箱子合并。
- 基于卡方的离散方法:首先将数值特征的每个不同值看做一个区间对每对相邻区间计算卡方统计量,如果大于阈值就合并,递归进行直到找不到卡方统计大于阈值的时候停止。
卡方计算方法 http://www.cnblogs.com/emanlee/archive/2008/10/25/1319569.html
- 基于熵的离散方法:其实就是照搬了决策树的思路,使用合成的方法或者分裂的方法根据熵计算和阈值判定来决定合成或分裂。
为什么要做特征离散化
链接:https://www.zhihu.com/question/31989952/answer/54184582
来源:知乎
- 离散特征的增加和减少都很容易,易于模型的快速迭代;
- 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
- 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
- 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
- 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;(特征离散化之后特征总体上来讲是多了很多,所以加入一个L1正则效果会比较好。)
- 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
- 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
大概的理解:
- 计算简单、易拓展
- 简化模型、快速迭代
- 增强模型的表达能力、泛化能力,增强鲁棒性、不易受噪声的影响
李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
对于特征的离散化,在CTR预估中通常还会使用GBDT+LR的方法,用GBDT产生稀疏特征后在放入LR中进行训练,效果还不错。
特征交叉
交叉从理论上而言是为了引入特征之间的交互,也即为了引入非线性性。是有实际意义的。
- 比如一个人是20岁,那么在编号为2的特征上面,它一直都是1,对篮球的广告是1,对化妆品的广告也是1,这样训练的结果得到的编号为2的权重的意义是——20岁的人点击所有的广告的可能性的都是这个权重,这样其实是不合理的。
- 有意义的应该是,这个20岁的人,当广告是跟体育相关的时候,它是一个值;当广告跟保健品相关的时候,它又是一个值。这样看起来才合理。如果这个不够深刻,基于跟上面同样的道理,性别这个特征也是一样的,假如也做了上面的离散化操作,编号是12和13,12是男性,13是女性。这样的话,对于一个男性/体育广告组合来说,编号12的特征值为1,男性/化妆品的组合的编号12的特征值也是1。这样也是不合理的。
- 怎么做到合理呢?以上面的性别的例子来说。编号12的特征值不取1,取值为该广告在男性用户上面的点击率(即将性别与广告这两个特征相交叉),如对于男性/体育广告的组合,编号12的特征的值为男性在体育广告上面点击率,这样,编号为12的特征就变成了一个浮点数,这个浮点数的相加减是有意义的。
- 这样的做法称为特征的交叉,现在就是性别跟广告的交叉得到的特征值。还有很多其他的方式可以进行交叉,目前工业上的应用最多的就是广告跟用户的交叉特征(编号为1的那个特征)、广告跟性别的交叉特征,广告跟年龄的交叉特征,广告跟手机平台的交叉特征,广告跟地域的交叉特征。如果做得比较多,可能会有广告主(每个广告都是一个广告主提交的一个投放计划,一个广告主可能会提交多个投放计划)跟各个特征的交叉。
为什么要特征交叉
在业界,逻辑回归模型之所以很受欢迎,主要是因为逻辑回归模型本质是线性模型,实现简单,易于并行,大规模拓展方便,迭代速度快,同时使用的特征比较好解释。线性模型对于非线性关系缺乏准确刻画,特征组合正好可以加入非线性表达,增强模型的表达能力。另外,基本特征可以认为是用于全局建模,组合特征更加精细,是个性化建模,因为在大规模离散LR中,单对全局建模会对部分样本有偏,对每一样本建模又数据不足易过拟合同时带来模型数量爆炸(特征的维数灾难),所以基本特征+组合特征兼顾了全局和个性化。
参考: