推荐系统中的GBDT+LR

本文探讨了GBDT(梯度提升决策树)和逻辑回归(LR)的集成模型,用于CTR预估中的特征增强与全面推荐。GBDT自动筛选特征并生成离散特征向量,这些向量作为LR的输入,以生成更全面的推荐结果。文章详细介绍了GBDT原理、二分类流程,以及GBDT+LR模型的工作原理和编程实现要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:GBDT模型(Gradient Boosting Decision Tree)

前言:在研究GBDT模型之前,我们需要知道什么是提升树算法,回归问题的提升树为什么要拟合当前模型的残差,模型的大致训练过程,为什么可以将损失函数负梯度在当前模型的值当成残差近似值,等等,详情可以看笔者这篇文章,该文章也有不足之处,例如在阐述GBDT的实现步骤时没有提及损失函数等,笔者将在本文中进行具体阐述。
  前面介绍的协同过滤和矩阵分解存在的劣势就是仅利用了用户与物品相互行为信息进行推荐,忽视了用户自身特征,物品自身特征以及上下文信息等,导致生成的结果往往会比较片面。而这次介绍的这个模型是2014年由Facebook提出的GBDT+LR模型,该模型利用GBDT自动进行特征筛选和组合,进而生成新的离散特征向量,再把该特征向量当做LR模型的输入,来产生最后的预测结果,该模型能够综合利用用户、物品和上下文等多种不同的特征,生成较为全面的推荐结果,在CTR点击率预估场景下使用较为广泛。
  下面首先会介绍GBDT和LR模型各自的原理及优缺点, 然后介绍GBDT+LR模型的工作原理和细节。

1,GBDT的原理:
梯度提升决策树(Gradient Boosting Decison Tree,GBDT) 由Friedman于1999年提出,是一种boost类集成算法,其核心思想是通过多轮迭代生成多个弱分类器,在每一轮迭代后计算损失函数负梯度在当前模型的值,来作为残差的近似值,即后一棵树以前面树林的结果与真实结果的残差为拟合目标,即每个分类器的训练都是基于上一轮分类器预测结果的残差,以串行的方式往残差减小的方向进行迭代,最后将每个训练好的弱分类器进行加权求和,得到最终的强分类器。简而言之,GBDT就是利用前项分布算法和加法模型(基函数的线性组合–此处为CART树,不论是回归还是分类问题,都是用的cart树),不断减小训练过程中的误差来实现数据的分类或者回归的算法,其训练过程如下:
在这里插入图片描述

2,GBDT如何进行二分类

gbdt解决二分类问题和回归问题的本质是一样的,都是通过不断构建决策树的方式,使预测目标一步步逼近真实目标值,但是二分类问题和回归问题的算是函数是不同的,回归问题一般采用均方误差为损失函数,而在二分类问题中,GBDT和逻辑回归一样,采用如下损失函数。关于回归问题的GBDT详情,可以查看笔者前面的提升树文章
在这里插入图片描述
 其中, yi是第i个样本的观测值, 取值要么是0要么是1, 而pi是第i个样本的预测值, 取值是0-1之间的概率,由于我们知道GBDT拟合的残差是当前模型的负梯度, 那么我们就需要求出这个模型的导数, 即dL/dpi, 对于某个特定的样本, 求导的话就可以只考虑它本身, 去掉加和号, 那么就变成了dl/dpi, 其中l如下:
在这里插入图片描述
根据逻辑回归的损失函数形式,Pi/1-Pi,就是对样本预测的概率,(log(pi/1−pi))一定不会陌生吧, 这就是对几率比取了个对数, 并且在逻辑回归里面这个式子会等于θX, 所以才推出了
在这里插入图片描述
这里我们令
在这里插入图片描述
则上面这个式子变成了:

在这里插入图片描述
这时候,我们对log(ηi)求导, 得
在这里插入图片描述
 这样, 我们就得到了某个训练样本在当前模型的梯度值了, 那么残差就是yi-pi。GBDT二分类的这个思想,其实和逻辑回归的思想一样,逻辑回归是用一个线性模型去拟合P(y=1|x)这个事件的对数几率:
在这里插入图片描述
GBDT二分类也是如此, 用一系列的梯度提升树去拟合这个对数几率, 其分类模型可以表达为:
在这里插入图片描述

3, 构建分类GBDT的步骤

1. 初始化GBDT

和回归问题一样,分类 GBDT 的初始状态也只有一个叶子节点,该节点为所有样本的初始预测值,如下:
在这里插入图片描述
上式里面, F代表GBDT模型, F0是模型的初识状态, 该式子的意思是找到一个γ,使所有样本的 Loss 最小,在这里及下文中,γ都表示节点的输出,即叶子节点, 且它是一个log(ηi) 形式的值(回归值),在初始状态,γ =F0。
下面看例子:
在这里插入图片描述
我们希望构建 GBDT 分类树,它能通过「喜欢爆米花」、「年龄」和「颜色偏好」这 3 个特征来预测某一个样本是否喜欢看电影。我们把数据代入上面的公式中求Loss:
在这里插入图片描述
为了令其最小, 我们求导, 且让导数为0, 则:
在这里插入图片描述
于是, 就得到了初始值

在这里插入图片描述
模型的初识状态F_0(x)=0.69
2.循环生成决策树

这里回忆一下回归树的生成步骤, 其实有4小步, 第一就是计算负梯度值得到残差, 第二步是用回归树拟合残差, 第三步是计算叶子节点的输出值, 第四步是更新模型。

1)计算负梯度得到残差:

在这里插入图片描述
此处使用m-1棵树的模型, 计算每个样本的残差rim, 就是上面的yi-pi, 于是例子中, 每个样本的残差:
在这里插入图片描述
2)使用回归树来拟合rim
  这里的i表示样本,遍历每个特征, 每个特征下遍历每个取值, 计算分裂后两组数据的平方损失, 找到最小的那个划分节点。 假如我们产生的第2棵决策树如下:
  在这里插入图片描述
3)对于每个叶子节点j, 计算最佳残差拟合值
在这里插入图片描述

意思是, 在刚构建的树m中, 找到每个节点j的输出γjm, 能使得该节点的loss最小。 那么我们看一下这个γ的求解方式, 这里非常的巧妙。 首先, 我们把损失函数写出来, 对于左边的第一个样本, 有
在这里插入图片描述
 这个式子就是上面推导的l, 因为我们要用回归树做分类, 所以这里把分类的预测概率转换成了对数几率回归的形式, 即log(ηi), 这个就是模型的回归输出值。而如果求这个损失的最小值, 我们要求导, 解出令损失最小的γ。 但是上面这个式子求导会很麻烦, 所以这里介绍了一个技巧就是使用二阶泰勒公式来近似表示该式, 再求导, 还记得伟大的泰勒吗?
在这里插入图片描述
  这里就相当于把L(y1,Fm−1(x1))当做常量f(x),γ作为变量Δx, 将f(x)二阶展开:   在这里插入图片描述
在这里插入图片描述
 这时候再求导就简单了
在这里插入图片描述
Loss最小的时候, 上面的式子等于0, 就可以得到 γ:
在这里插入图片描述
因为分子就是残差(上述已经求到了), 分母可以通过对残差求导,得到原损失函数的二阶导:
在这里插入图片描述
这时候, 就可以算出该节点的输出:
在这里插入图片描述
这里的下面γjm表示第m棵树的第j个叶子节点。 接下来是右边节点的输出, 包含样本2和样本3, 同样使用二阶泰勒公式展开:
在这里插入图片描述
求导, 令其结果为0,就会得到, 第1棵树的第2个叶子节点的输出:
在这里插入图片描述
可以看出, 对于任意叶子节点, 我们可以直接计算其输出值
在这里插入图片描述
4)更新模型Fm(x)
在这里插入图片描述
这样, 通过多次循环迭代, 就可以得到一个比较强的学习器Fm(x)
GBDT优缺点:
我们可以把树的生成过程理解成自动进行多维度的特征组合的过程,从根结点到叶子节点上的整个路径(多个特征值判断),才能最终决定一棵树的预测值, 另外,对于连续型特征的处理,GBDT 可以拆分出一个临界阈值,比如大于 0.027 走左子树,小于等于 0.027(或者 default 值)走右子树,这样很好的规避了人工离散化的问题。这样就非常轻松的解决了逻辑回归那里自动发现特征并进行有效组合的问题, 这也是GBDT的优势所在。
  但是GBDT也会有一些局限性, 对于海量的 id 类特征,GBDT 由于树的深度和棵树限制(防止过拟合),不能有效的存储;另外海量特征在也会存在性能瓶颈,当 GBDT 的 one hot 特征大于 10 万维时,就必须做分布式的训练才能保证不爆内存。所以 GBDT 通常配合少量的反馈 CTR 特征来表达,这样虽然具有一定的范化能力,但是同时会有信息损失,对于头部资源不能有效的表达。

GBDT+LR模型

LR算法属于线性模型,模型简单,计算开销小且易并行化,能够处理海量的数据,但缺点是只在具有良好线性关系的数据集上有效,其学习能力有限,对特征选取要求高,容易造成欠拟合。因此,需要有效的特征工程来生成有区分度的特征,从而产生良好的分类效果。早在2014年He等就提出了通过GBDT模型生产新特征来解决LR的特征工程问题,将其应用于广告点击率的评估。GBDT算法以Boost算法为基础,每次迭代都会生成一棵新树,该特点正好可以用来挖掘有区分度的新特征,避免复杂的人工成本。

GBDT+LR 使用最广泛的场景是CTR点击率预估,即预测当给用户推送的广告会不会被用户点击。

GBDT-LR融合模型的训练过程如图所示,其具体步骤如下:

1)利用原始训练集训练GBDT模型构造—系列的决策树,组成一个强分类器。
  2)利用训练好的GBDT模型对原始数据进行预测时,不以分类概率作为输出,而是以模型中每棵树的预测值所属叶结点的位置为新特征提取特征值,形成新的数据。
  3)对新数据进行One-hot编码,也就是将样本输出所属叶结点的位置标记为1,得到每个样本的位置标记向量W。所有样本的输出会组成一个标记每棵决策树输出的叶结点位置的稀疏矩阵。
  4)将该W作为新的训练数据供LR模型进行训练。
在这里插入图片描述
有了上面的铺垫, 这个模型解释起来就比较容易了, 模型的总体结构长下面这样:
在这里插入图片描述
 训练时,GBDT 建树的过程相当于自动进行的特征组合和离散化,然后从根结点到叶子节点的这条路径就可以看成是不同特征进行的特征组合,用叶子节点可以唯一的表示这条路径,并作为一个离散特征传入 LR 进行二次训练。

比如上图中, 有两棵树,x为一条输入样本,遍历两棵树后,x样本分别落到两颗树的叶子节点上,每个叶子节点对应LR一维特征,那么通过遍历树,就得到了该样本对应的所有LR特征。构造的新特征向量是取值0/1的。 比如左树有三个叶子节点,右树有两个叶子节点,最终的特征即为五维的向量。对于输入x,假设他落在左树第二个节点,编码[0,1,0],落在右树第二个节点则编码[0,1],所以整体的编码为[0,1,0,0,1],这类编码作为特征,输入到线性分类模型(LR or FM)中进行分类。

预测时,会先走 GBDT 的每棵树,得到某个叶子节点对应的一个离散特征(即一组特征组合),然后把该特征以 one-hot 形式传入 LR 进行线性加权预测。

这个方案应该比较简单了, 下面有几个关键的点我们需要了解:

1. 通过GBDT进行特征组合之后得到的离散向量是和训练数据的原特征一块作为逻辑回归的输入, 而不仅仅全是这种离散特征 。
  2. 建树的时候用ensemble建树的原因就是一棵树的表达能力很弱,不足以表达多个有区分性的特征组合,多棵树的表达能力更强一些。GBDT每棵树都在学习前面棵树尚存的不足,迭代多少次就会生成多少棵树。
  3. RF也是多棵树,但从效果上有实践证明不如GBDT。且GBDT前面的树,特征分裂主要体现对多数样本有区分度的特征;后面的树,主要体现的是经过前N颗树,残差仍然较大的少数样本。优先选用在整体上有区分度的特征,再选用针对少数样本有区分度的特征,思路更加合理,这应该也是用GBDT的原因。
  4. 在CRT预估中, GBDT一般会建立两类树(非ID特征建一类, ID类特征建一类), AD,ID类特征在CTR预估中是非常重要的特征,直接将AD,ID作为feature进行建树不可行,故考虑为每个AD,ID建GBDT树。
    1)非ID类树:不以细粒度的ID建树,此类树作为base,即便曝光少的广告、广告主,仍可以通过此类树得到有区分性的特征、特征组合
    2)ID类树:以细粒度 的ID建一类树,用于发现曝光充分的ID对应有区分性的特征、特征组合

4,编程实现

我们回顾一下上面的模型架构, 首先是要训练GBDT模型, GBDT的实现一般可以使用xgboost, 或者lightgbm。训练完了GBDT模型之后, 我们需要预测出每个样本落在了哪棵树上的哪个节点上, 然后通过one-hot就会得到一些新的离散特征, 这和原来的特征进行合并组成新的数据集, 然后作为逻辑回归的输入,最后通过逻辑回归模型得到结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值