目标:

深入理解Facebook 2014年提出的的GBDT+LR模型。
CSDN上泛泛而谈的文章很多,真正讲解透彻的没几篇。争取我这篇能讲解透彻。
今晚又想了许久,想通了一些原理。也分享出来。


算法背景:

FaceBook一推出这一模型就引起了业内的轰动,因其设计的巧妙以及预测效果的精良,很多公司一度极力推广,在数据比赛KDD中也经常使用。尽管GBDT+LR依然存在其问题点,但是在当时数据量没有特别大的情况下,这一模型几乎处于横扫千军的状态。
后期模型被不停的优化,于是产出了:XGBoost/GBDT+LR/FM/FFM 等各种组合方式,阿里也在他的DIN模型中提出并弥补了GBDT+LR的缺点。

点击率预估模型(CTR)涉及的训练样本一般是上亿级别,样本量大,模型常采用速度较快的LR(logistic regression)。LR虽然是线性模型线性模型,但是在业界广泛使用。为什么呢?

  • LR虽然模型本身表达能力差,但是可以通过特征工程不断减少问题的非线性结构。
  • LR模型计算复杂度低,可以吞吐超大规模的特征空间和样本集合,这样就为效果优化打开了空间。但正因为LR学习能力有限,此时特征工程尤其重要。

在深度学习大行其道之前,一般采用人工或传统的方法进行特征工程,人工成本高,传统的方法像FM,FFM,只能挖掘两个特征间的特征交互关系,作用有限。GBDT是解决这个问题的一种不错方案。
GBDT有以下优点:

  • 弱分类器要求不高,树的层数一般较小,小数据可用,扩展到大数据也能方便处理。
  • 需要更少的特征工程,比如不用做特征标准化
  • 可以处理字段缺失的数据
  • 可以自动组合多个特征并且不用关心特征间是否依赖,可以自动处理特征间的交互,不用担心数据是否线性可分
  • 可以灵活处理多种类型的异构数据,这是决策树的天然特性
  • 损失函数选择灵活,可以选择具有鲁棒性的损失函数,对异常值有一定的鲁棒性

显而易见,GBDT对于处理特征有很多优点。而LR虽然是线性模型,但是Facebook探索出一种将GBDT和LR结合的方案,来预测广告的点击通过率(Click Trough Rate,CTR)的预测问题。结果显示融合方案比单个的GBDT或LR的性能高3%左右。
推荐系统整体流程:

算法原理:

点击通过问题,用户要么点击要么不点击,因此y∈(0,1)y∈{(0,1)}y(0,1),是个二分类的问题。
GBDT与LR是如何结合的呢?论文上的一张图:

如上图所示,tree1tree1tree1tree2tree2tree2两棵决策树,组成一个梯度提升树,称之为强学习器。这个强学习器由两个弱学习器前向加和组成。假设xxx输入GBDT后,落到左边回归树的第一个节点,落到右边回归树的第一个节点。则GBDT对样本xxx的特征进行工程处理得到的转换特征,就可以表示为:(1,0,0)(1,0,0)(1,0,0)串联(1,0)(1,0)(1,0) => (1,0,0,1,0)(1,0,0,1,0)(1,0,0,1,0)。然后将拼接后的特征输入LR即可进行分类。

理解算法:

  • 树的叶子节点表示的是特征组合后得到的一个数值,值比较大。表示和用户最终是点击(label:1)还是不点击(label:0)相关的系统,根节点表示一个特征判断。(修正:叶子节点不是0/1,而是一个实数值)

    可以看到,线性模型LR,就是学习所有通过不同特征进行预测结果(0/1)(0/1)(0/1)的权重,也就是投票时各个判断标准所占的比重。
  • GBDT决策树是如何产生的呢?
    这里要结合Boosting的逻辑详细解释一下这个模型,论文的图形过于抽象。

    上图中我们看到GBDT中每一次迭代产生的叶子节点都会被输入到LR中,假如每个弱学习器有10个叶子节点,同时循环60次,则输入到LR中的节点数量即为600个,这600个节点中既涵盖了低阶单维度的特征(通过某一个特征就进行了判断),也包含高阶复合维度的特征(通过某多层特征才进行了判断),越往下的学习器,特征融合效果越好。因为GBDT结合残差网络的思想,逐渐缩小预测误差。
    我们将boosting的结构划归到GBDT项下,得到更直观的图形为:



参考资料:

  • 为什么要使用集成的决策树模型,而不是单棵的决策树模型?

    • 其一:一棵树的表达能力很弱,不足以表达多个有区分性的特征组合,多棵树的表达能力更强一些。

    • 其二:GBDT是Boosting的经典算法,因其不停的迭代,对数据特征有深度融合的效果,高效组合多个特征,比人工筛选特征组合更高效全面。思想类似于残差网络。

  • 为什么建树采用GBDT而非RandomForest?

    • 其一:RF也是多棵树,但从效果上有实践证明不如GBDT。RF思想是多棵树在最后投票的权重一样,如果LR再使得每个树结果的权重不一样,可能和训练RF的初衷相悖。

    • 其二:GBDT在迭代过程中,前面的树特征分裂主要体现对多数样本有区分度的特征,后面的树,主要体现的是经过前N颗树,残差仍然较大的少数样本,优先选用在整体上有区分度的特征,再选用针对少数样本有区分度的特征,思路更加合理。另外,GBDT本来每棵树的权重就不一样,然后用LR让每个树的叶子节点的权重都不一样,这样理论上增加了GBDT的区分度,感觉更加提升了GBDT的效果。粒度从一个树提升到一个叶子节点。这应该也是用GBDT的原因。
      实验也证明,RF效果和GBDT效果差。

  • 为什么要将GBDT与LR融合?而不是GBDT+MLP?

    • GBDT+LR融合是Stacking思想的成功应用,上文中描述了GBDT的优势,但是由于其树状特性,数据敏感度较高,部分数据的调整会引发整体类别的变化,可处理数据量有限,需要一个相对比较钝化的模型来提升泛化性能。LR模型被发觉出来,LR模型的并行能力很强,能够处理较大的数据集,同时只能处理一维的特征,学习能力有限,需要大量的特征工程。

这两个模型的优缺点整合后发现,两者刚好可以互补,因此,成就了这一经典。

  • 为什么不是GBDT+MLP?MLP拟合能力比较强,为啥不是强强联手?

    • 首先,经过GBDT产生的多棵树,然后把叶子节点进行拼接层一个长长的一维向量,极大的增大了特征值,也称为特征增广。比如包含3个特征的输入向量x=[x1,x2,x3]x={[x_1,x_2,x_3]}x=[x1,x2,x3],理论上产生一棵完全二叉树,能有8个叶子节点。如图:


    而GBDT模型还要产生N棵这样的树组成一个决策树群,所以理论上,叶子节点树目为2i∗N2^i*N2iN个叶子结点,iii为特征的数目,也就是XXX的维度,这个数量之多,想想就可怕。
    这么多叶子节点组成的一维向量,送去MLP,会有非常多的参数需要训练(单个神经元就需要训练一个k和b),而且叶子节点组成的一维向量非常大(特征增广),导致送去MLP运行是哪变得不能接受。

  • MLP一般会进行特征工程进行特征压缩和特征值稠密化,比如embeding,PCA等等,目的就是减少特征值的维度,减小特征矩阵的稀疏性,而GBDT的操作过程是特征增广,和MLP的特征工程刚好相反,所以不适合MLP。


GBDT+LR缺点:

模型也有一定的缺点

缺点:
1、 无法获得物品和用户的ID类特征,也就是ID对应的embeding向量。

  • 怎么理解这句话?现代的推荐系统中,对物品或者用户的ID特征非常重要,它往往就能代表这个物品间的关联关系。而这个ID并不是直接作为数值进行模型训练,比如我们在常规的机器学习里面,基本就是简单的丢掉ID这一列,因为ID是随机分配的,和最终的label没有任何关系。
  • 物品ID应该怎样用呢?是利用用户的历史行为,通过类似Word2Vec的方式生成用户embeding,一定程度上能表示物品间的关系。比如,用户购买产品1后,基本都会购买产品2,这样产品ID=1的embeding向量,会非常接近产品ID=2的embeding向量。此时,我们通过物品的embeding向量相似度,就能进行相关物品推荐了,这个embeding就是通过产品ID得到的,蕴含了丰富的信息,如果直接丢弃掉ID,则直接摒弃掉了物品间的相互关系,显然模型的准确度会大大下降。

2、离线处理和在线处理都比较复杂。需要把多棵树丢到线上去,然后遍历,拼装特征,然后线性推断,比较麻烦。

3、 离线训练容易过拟合,因为GBDT本身就容易过拟合。

  • 怎么理解?链接里有说道:高维稀疏特征的时候,lr 的效果会比 gbdt 好,使用 gbdt 很容易过拟合。

    • 首先讲一个 case : 假设有1w 个样本, yyy类别0和1,100维特征,其中10个样本都是类别1,而特征 f1f_1f1的值为0,1,且刚好这10个样本的f1f_1f1特征值都为1,其余9990样本都为0(在高维稀疏的情况下这种情况很常见)。在树模型的时候,很容易优化出含一个使用 f1f_1f1为分裂节点的树直接将数据划分的很好,但是当测试的时候,却会发现效果很差,因为这个特征只是刚好偶然间跟yyy拟合到了这个规律,这也是我们常说的过拟合。但是当时我还是不太懂为什么线性模型就能对这种 case 处理的好?照理说 线性模型在优化之后不也会产生这样一个式子:y=W1∗f1+Wi∗fi+....y = W1*f1 + Wi*fi+....y=W1f1+Wifi+....,其中 W1特别大以拟合这十个样本吗,因为反正 f1f1f1的值只有0和1,W1过大对其他9990样本不会有任何影响。 后来思考后发现原因是因为现在的模型普遍都会带着正则项,而 lr 等线性模型的正则项是对权重的惩罚,也就是 W1W1W1一旦过大,惩罚就会很大,进一步压缩 W1W1W1的值,使他不至于过大,而树模型则不一样,树模型的惩罚项通常为叶子节点数和深度等,而我们都知道,对于上面这种 case,树只需要一个节点就可以完美分割9990和10个样本,惩罚项极其之小,这也就是为什么在高维稀疏特征的时候,线性模型会比非线性模型好的原因了:带正则化的线性模型比较不容易对稀疏特征过拟合。

LR:

最简单的是逻辑回归(Logistic Regression),一个广义线性模型。

拿某user的用户画像(一个向量)比如[3,1][3, 1][3,1],拼接上某item的物品画像比如[4,0][4, 0][4,0],再加上代表context的向量[0,1,1][0, 1, 1][0,1,1]后得到x=[3,1,4,0,0,1,1]x=[3, 1, 4, 0, 0, 1, 1]x=[3,1,4,0,0,1,1],若该user曾与该item发生过联系则labellabellabel为1,这些加起来是一个正样本,同时可以将用户“跳过”的item或热门的却没有与用户产生过联系的item作为负样本,labellabellabel为0,拟合如下方程:
y=11+e−(wTx+b)y=\frac{1}{1+e^{-(w^{T}x+b)}}y=1+e(wTx+b)1

其中xxx即为上述向量,www是与xxx每个元素相对应的权重,bbb为截距。其损失函数为:
其中为样本的label=0或1label=0或1label=01,是根据模型预测的0到1之间的数字。

通过降低此损失函数来拟合训练样本来完成模型的训练,利用模型对新的数据进行预测即完成了打分。训练过程参考sklearn的LogisticRegression很容易完成。

传统的LR只能在线下批量处理大量数据,无法有效处理大规模的在线数据流。模型更新可能要一天甚至更多,不够及时。

代码部分

代码部分下篇再说。此篇够长了。

传统推荐算法Facebook的GBDT+LR模型深入理解相关推荐

  1. Facebook的GBDT+LR模型python代码实现

    承接上篇讲解,本文代码,讲解看上篇 目标:GBDT+LR模型 步骤:GBDT+OneHot+LR 测试数据:iris 代码: 结果比较:与直接GBDT模型的比较 目标:GBDT+LR模型 实现GBDT ...

  2. 推荐系统 | 基础推荐模型 | GBDT+LR模型 | Python实现

    基础推荐模型--传送门: 推荐系统 | 基础推荐模型 | 协同过滤 | UserCF与ItemCF的Python实现及优化 推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTor ...

  3. 推荐系统与深度学习(十四)——GBDT+LR模型原理

    公众号后台回复"图书",了解更多号主新书内容 作者:livan 来源:数据python与算法 模型原理 与GBDT+LR模型结缘是刚开始学习推荐系统的过程中,FaceBook一推出 ...

  4. 推荐系统(二)GBDT+LR模型

    推荐系统(二)GBDT+LR模型 推荐系统系列博客: 推荐系统(一)推荐系统整体概览 在写这篇博客之前,一度纠结许久,到底该不该起这个标题,因为把GBDT+LR模型放在推荐系统系列里,似乎有些不妥,如 ...

  5. 推荐系统入门【分类、传统推荐算法、UserCF和ItemCF】

    推荐系统入门[分类.传统推荐算法.UserCF和ItemCF] 一.推荐系统分类 二.传统推荐算法 2.1 基于规则的推荐 2.2 基于内容的推荐 2.3 基于协同过滤的推荐 (1)建立用户-项目评分 ...

  6. GBDT + LR模型融合

    n)[1],LR是广义线性模型,与传统线性模型相比,LR使用了Logit变换将函数值映射到0~1区间[2],映射后的函数值就是CTR的预估值.LR这种线性模型很容易并行化,处理上亿条训练样本不是问题, ...

  7. 推荐算法炼丹笔记:排序模型CTR点击率预估系列

    微信公众号:炼丹笔记 ​CTR点击率预估系列家谱 炼丹之前,先放一张CTR预估系列的家谱,让脉络更加清晰. (一)FiBiNET:结合特征重要性和双线性特征交互进行CTR预估 1.1 背景 本文发表在 ...

  8. 《推荐系统笔记(十)》CTR预估以及一般算法介绍(GBDT+LR)

    前言 CTR预估是推荐系统中重要的问题,根据历史数据,我们需要预测用户是否点击.CTR预估同样可以运用到广告中,预测广告的点击率等. CTR数据形式 CTR预估问题的数据形式一般是这样的: 列名:特征 ...

  9. svd奇异值分解_传统推荐算法(一)SVD推荐(1)解读奇异值分解

    文章目录 写在前面 1. 从几何变换到奇异值分解 2. 代数角度理解奇异值与奇异向量 2.1 从正交基映射推导SVD 2.2 特征值分解求解奇异值和奇异向量 2.2.1 求解过程 2.2.2 推论 2 ...

最新文章

  1. 中国工业节能减排产业项目盈利模式及投资风险预警报告2021-2027年
  2. 判断js中数据类型 的最短代码
  3. python读取txt文件_python实现读写txt文件的几种方法
  4. 【Java】GoF-23种设计模式在Java核心类库中的应用
  5. java activemq 断线_activemq 长时间没有消息client会断开吗?
  6. nvm切换node版本的命令
  7. 你还在 Docker 中跑 MySQL?恭喜你,好下岗了!
  8. Axure RP 9 汉化包
  9. mysql设计一个网上购物系统_基于PHP和MySQL的网上购物系统设计与实现
  10. 【LaTeX】对表格中的内容添加脚注不显示
  11. windows-sys15:windows11 Android 子系统安装和apk应用安装
  12. 线程 线程的创建与回收
  13. 何恺明团队新作FLIP:通过Masking扩展语言-图像预训练
  14. 肌酐研究之Biovision肌酐合成试剂盒
  15. 解决MATLAB高版本启动较慢问题
  16. Gitlab 12.9.4 的搭建部署及遇到的问题。
  17. CH13,拍42,练习一。通过文本文件统计页面访问量
  18. 机器人控制系统软硬件平台
  19. 谷歌浏览器设置打开新标签页为指定网页设置
  20. IDEA集成GitLab

热门文章

  1. android调用chrome,android webview调用使用chrome浏览器
  2. PgSQL · 乱入拜年 · 小鸡吉吉和小象Pi吉(PostgreSQL)的鸡年传奇
  3. 百度对site语法的几种情况
  4. JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】
  5. 山东理工大学ACM平台题答案 2561 九九乘法表
  6. 一个实践梦想的传奇人物
  7. PHPMyWind编辑器支持Word上传
  8. 向量逆时针旋转ang度
  9. 网站被劫持到其它网站如何解决
  10. 【学习技巧】——怎样改掉学习上的坏习惯