在工作确实使用过lr/gbdt,但是特征都是连续型,就达到效果了,其实没有太多的做特征加工,反而更多的在特征提取上(将行为或者异常点抽象成数学表达,这一点也很难,但是面试时候又太依赖于业务背景,很多时候面试官根本没有耐心听你说,所以要尽量去覆盖他们的认知范围,那么最直接的方法就是模型中的共性问题了,普遍问题你都没有思考过,说不过去。。)。来吧,从头开始!
1.lr,gbdt,libfm三种模型分别适合处理什么类型特征?知乎回答链接
当时想搜一下在高维稀疏特征时,lr为什么比gbdt好,搜到了知乎上这个问题,先说一下总体结论:
1、特征太多,gbdt不一定跑的动,可以分桶,但会有损失,2、树的分割往往只考虑了少量特征,大部分特征用不到,少量的特征在多次分裂时被重复用到,剩余的长尾基本用不到,gbdt只是一个贪心的解,每次都考虑增益大的特征来分裂,gbdt可能忽略很多'小而美'的特征;使用lr、svm、ffm等线性模型来处理,可以在线性假设下求得最优解。考虑线性方程式Ax=b。高维稀疏对这个方程影响就是少了几个等式,但是每个'小而美的'特征仍然会被计算权重。同时由此带来的可能的过拟合问题通过正则来解决。就是说多参数的线性模型,既可以学到稠密特征所带来的普遍情况,也可以学到稀疏特征带来的个别情况。
下面拆开了揉碎了来看,这里面有多少盲点。
(1)lr为什么适合处理海量稀疏特征? 特征主要分离散特征和连续特征,对于连续特征,需要进行标准化(特征之间量纲不一致,举例年龄特征是0-100,上网时长占比是0-1之间的小数,量级大的特征可能会起决定性作用,量级小的特征也存在0.01大小的差异在权重上反应不出来,所以需要标准化,为了消除特征间单位和尺度差异的影响,对每维特征同等看待。) ;对于离散特征,通常使用one-hot编码,有多少特征值就转化为多少个特征,对于类别特征,one-hot是为了消除类别原始标签之前的相对大小导致的误差,比如某个类别标签是1,2,3,在计算距离的时候(1,3)的欧式距离大于(1,2)的欧式距离,使用one-hot更合理一点,001,010,100,但是如果是类别标签之间信息不对等,那么就需要区别对待了(标准基乘上系数来自知乎,尚不懂待研究:分类问题里,损失函数经常定义为预测值和真实值的误差平方和。离散数字编码之后,3被预测称1的损失是比3预测称2更大的(与现实不符)。而onehot则保证了不同的类别距离相同。因此onehot对不同的分类更适合。当然实际生活中有许多分类变量也带有距离的含义(比如职称),所以标准基乘上系数可能会更好。)
- 基于参数的模型或基于距离的模型,都要进行标准化和归一化;基于概率分布的模型,比如决策树相关的CART,随机森林,bagging和boosting等,不需要标准化。
因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。而且,树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。既然树形结构(如决策树、RF)不需要归一化,那为何非树形结构比如Adaboost、SVM、LR、Knn、KMeans之类则需要归一化呢?
基于参数优化的模型,特征值差别很大时,比如说LR,我有两个特征,一个是(0,1)的,一个是(0,10000)的,运用梯度下降的时候,损失等高线是椭圆形,需要进行多次迭代才能到达最优点。但是如果进行了归一化,那么等高线就是圆形的,促使SGD往原点迭代,从而导致需要的迭代次数较少。基于距离的模型,如knn和kmeans,对距离比较敏感,所以要归一化使得多个特征之间重要性相等。 -
连续特征离散化?稀疏离散向量算内积更快,离散化后特征更加鲁棒性,比如年龄分割为>30 特征值为01,小于等于30特征值02,如果一个异常点300岁,还是属于特征值为01,我觉得这一点主要还是看应用,到底区间划分后离散化,降低特征取值个数好不好,会不会有信息损失,如果没有太多影响就无所谓了;另外就是相当于1个特征变成多个特征,引入非线性,也便于做特征交叉,进一步带来非线性。
FM算法学习好文:https://blog.csdn.net/realnuannuan/article/details/93401214
lr模型只有线性特征,后来引入特征交叉,为xi*xj加一个权重wij,省去部分特征工程,增加了模型复杂度,存在问题是如果训练数据中xi和xj没有同时出现,那么wij就得不到,泛化能力不好,另外就是时间复杂度是n^2。
FM通过给每个交叉特征赋予一个向量,通过向量内积来计算wij,那么只要xi在训练样本中出现,就能学到vi,增加了模型的泛化能力,另外通过推导可以将复杂度降为o(kn),其中k是隐含向量v的长度。简化过程的本质就是元素之间的二次多项可化为元素之间和的平方减去平方的和(来自引用)。
以上来自:知乎引用 另外FM代码实现-知乎引用 可以进一步帮助理解,特征不是one-hot编码的。