模型是使用离散特征还是连续特征,其实是一个“海量离散特征 + 简单模型” 同 “少量连续特征 + 复杂模型”的权衡,既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是喜欢折腾模型了。通常来说,前者容易,可以n个人一起并行做,有成功经验;后者目前看起来很赞,能走多远还需拭目以待。
——李沐
在CTR预估中,通常都会用到离散特征特征 + LR,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1类别特征交给逻辑回归模型,这样做的优势主要有以下几点:
1.离散特征的增加和减少都很容易,易于模型的快速迭代。
2.稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
3.离散化后的特征对异常数据具有很强的鲁棒性;
4.逻辑回归属于广义线性模型,表达能力有限;单变量离散化为N
个后,每个变量有单独的权重,相当于为模型引入了非线性能力,能够提升模型的表达能力:
- 加大拟合:在LR模型中,特征A作为连续特征对应的权重是Wa。A是线性特征,因为
y = Wa*A
,y对于A的导数就是Wa,如果离散化后,A按区间离散化为A_1,A_2,A_3。那么y = w_1*A_1+w_2*A_2+w_3*A_3
.那么y对于A的函数就相当于分段的线性函数,y对于A的导数也随A的取值变动,所以,相当于引入了非线性。 - 防止过拟合:当使用连续特征时,一个特征对应于一个权重,那么,如果这个特征权重较大,模型就会很依赖于这个特征,这个特征的一个微小变化可能会导致最终结果产生很大的变化,这样子的模型很危险,当遇到新样本的时候很可能因为对这个特征过分敏感而得到错误的分类结果,也就是泛化能力差,容易过拟合。而使用离散特征的时候,一个特征变成了多个,权重也变为多个,那么之前连续特征对模型的影响力就被分散弱化了,从而降低了过拟合的风险。
5.离散化后进行特征交叉,加入特征A离散化为M个值,特征B离散为N个值,那么交叉之后会有M*N个变量,进一步引入非线性,提升表达能力;
6.特征离散化后,模型更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完成不同的人,当然,需要注意的是,如何合理的划分区间。
离散方法
等距离散
取值范围均匀划成n等份,每份的间距相等
等频离散
均匀分为n等份,每份内包含的观察点数相同
优化离散
大致有两类方法:
1.卡方检验方法:(统计样本的实际观测值与理论推断值之间的偏离程度,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合)
- 分裂方法:找到一个分裂点看,左右2个区间,在目标值上分布是否有- 显著差异,有显著差异就分裂,否则就忽略。这个点可以每次找差异最大的点
- 合并方法:先划分如果很小单元区间,按顺序合并在目标值上分布不显著的相邻区间,直到收敛
2.信息增益方法:
- 分裂方法:找到一个分裂点看,左右2个区间,看分裂前后信息增益变化阈值,如果差值超过阈值(正值,分列前-分裂后信息熵),则分裂。每次找差值最大的点做分裂点,直到收敛
- 合并方法:先划分 如果很小单元区间,按顺序合并信息增益小于阈值的相邻区间,直到收敛