云计算百科
云计算领域专业知识百科平台

辑度组合 - LR + GBDT 组合模型

1. 概述

在推荐系统的融合阶段,不同召回算法(协同过滤、矩阵分解、基于内容的推荐)各自产生一批候选物品和分数。

但这些分数:

  • 有的算法只给结果不给分数;
  • 有的算法分数范围不同(有的 0~1,有的 0~100);
  • 即使归一化,产生机制不同,仍不可直接比较。

因此需要一个统一的融合模型来重新打分排序。

Facebook 广告系统中使用的经典方案就是 GBDT + LR。

分工:

  • GBDT:自动生成高阶特征组合(替代人工特征工程)。
  • LR:以 GBDT 的叶子节点输出为输入特征,输出最终 CTR。

2. 训练数据

假设我们有一个推荐场景,需要预测用户是否点击物品。收集到 8 条训练样本:

样本年龄性别物品类别是否点击 (y)
1 25 电子 1
2 30 服饰 1
3 25 电子 0
4 35 服饰 1
5 30 电子 1
6 25 服饰 0
7 35 电子 0
8 30 服饰 1

3. 第一步:训练 GBDT(生成特征组合)

3.1 第 1 棵树:寻找最优分裂特征

我们需要在"年龄"“性别”"物品类别"三个特征中,找到使基尼不纯度下降最多的分裂点。

回归用平方误差,分类用基尼不纯度
回归任务(预测年龄、y 值), 分类任务(预测点击/不点击)
平方误差(MSE, 残差的均值), 基尼不纯度 或 信息增益(多数类(分类)或类别概率)

根节点基尼不纯度:

  • 正样本(点击=1):5 个,负样本(点击=0):3 个
  • Gini根=1−(5/8)2−(3/8)2=1−0.3906−0.1406=0.4688Gini_{根} = 1 – (5/8)^2 – (3/8)^2 = 1 – 0.3906 – 0.1406 = 0.4688Gini=1(5/8)2(3/8)2=10.39060.1406=0.4688

候选 1:按"性别"分裂:

分支样本正/负基尼
1,4,5,8 4正/0负 1−(4/4)2−0=01-(4/4)^2-0=01(4/4)20=0
2,3,6,7 1正/3负 1−(1/4)2−(3/4)2=0.3751-(1/4)^2-(3/4)^2=0.3751(1/4)2(3/4)2=0.375

加权基尼:48×0+48×0.375=0.1875\\frac{4}{8} \\times 0 + \\frac{4}{8} \\times 0.375 = 0.187584×0+84×0.375=0.1875

基尼下降:0.4688−0.1875=0.28130.4688 – 0.1875 = 0.28130.46880.1875=0.2813

候选 2:按"年龄 ≤ 27.5"分裂:

分支样本正/负基尼
年龄≤27.5 1,3,6 1正/2负 1−(1/3)2−(2/3)2=0.4441-(1/3)^2-(2/3)^2=0.4441(1/3)2(2/3)2=0.444
年龄>27.5 2,4,5,7,8 4正/1负 1−(4/5)2−(1/5)2=0.321-(4/5)^2-(1/5)^2=0.321(4/5)2(1/5)2=0.32

加权基尼:38×0.444+58×0.32=0.3665\\frac{3}{8} \\times 0.444 + \\frac{5}{8} \\times 0.32 = 0.366583×0.444+85×0.32=0.3665

候选 3:按"物品类别"分裂:

分支样本正/负基尼
电子 1,3,5,7 2正/2负 1−(2/4)2−(2/4)2=0.51-(2/4)^2-(2/4)^2=0.51(2/4)2(2/4)2=0.5
服饰 2,4,6,8 3正/1负 1−(3/4)2−(1/4)2=0.3751-(3/4)^2-(1/4)^2=0.3751(3/4)2(1/4)2=0.375

加权基尼:48×0.5+48×0.375=0.4375\\frac{4}{8} \\times 0.5 + \\frac{4}{8} \\times 0.375 = 0.437584×0.5+84×0.375=0.4375

对比结果:

分裂特征加权基尼基尼下降
性别 0.1875 0.2813 ✅
年龄 0.3665 0.1023
物品类别 0.4375 0.0313

结论:第 1 棵树选择 “性别” 作为分裂特征。

3.2 第 1 棵树的输出

[性别]
/
男 女
/
Leaf 1 Leaf 2
预测CTR=1.0 预测CTR=0.25
(4正/0负) (1正/3负)

  • Leaf 1(男):预测点击率 = 4/4=1.04/4 = 1.04/4=1.0
  • Leaf 2(女):预测点击率 = 1/4=0.251/4 = 0.251/4=0.25

3.3 计算残差(用于训练第 2 棵树)

残差 = 真实值 – 预测值:

样本性别真实 y第1棵树预测残差
1 1 1.0 0.0
2 1 0.25 0.75
3 0 0.25 -0.25
4 1 1.0 0.0
5 1 1.0 0.0
6 0 0.25 -0.25
7 0 0.25 -0.25
8 1 1.0 0.0

3.4 第 2 棵树:拟合残差

用同样的方式,在"年龄"和"物品类别"中选择最优分裂。

按"年龄 ≤ 27.5"分裂残差:

分支样本残差均值
年龄≤27.5 1,3,6 0, -0.25, -0.25 -0.167
年龄>27.5 2,4,5,7,8 0.75, 0, 0, -0.25, 0 0.100

按"物品类别"分裂残差:

分支样本残差均值
电子 1,3,5,7 0, -0.25, 0, -0.25 -0.125
服饰 2,4,6,8 0.75, 0, -0.25, 0 0.125

计算两种分裂的误差平方和,选择较小的。为简化,假设"年龄"分裂更优。

3.5 第 2 棵树的输出

[年龄]
/
≤27.5 >27.5
/
Leaf 3 Leaf 4
预测值=-0.167 预测值=0.100

3.6 最终 GBDT 模型(2 棵树)

使用学习率 η=0.1\\eta = 0.1η=0.1,最终预测为:
y^=第1棵树+0.1×第2棵树
\\hat{y} = \\text{第1棵树} + 0.1 \\times \\text{第2棵树}
y^=1棵树+0.1×2棵树


4. 第二步:将 GBDT 输出转化为 LR 的输入特征

4.1 转换规则

对于每条样本:

  • 在每棵树上从根节点走到叶子节点;
  • 每个叶子节点对应一个 one-hot 编码;
  • 将所有树的 one-hot 编码拼接,作为 LR 的输入特征。

本例中:

  • 第 1 棵树有 2 个叶子 → 2 维 one-hot
  • 第 2 棵树有 2 个叶子 → 2 维 one-hot
  • 总特征维度 = 2+2=42 + 2 = 42+2=4

4.2 为每条样本生成特征向量

叶子条件包含样本正/负叶子值 (预测CTR)
Leaf 1 1, 4, 5, 8 4正/0负 4/4=1.04/4 = 1.04/4=1.0
Leaf 2 2, 3, 6, 7 1正/3负 1/4=0.251/4 = 0.251/4=0.25
叶子条件包含样本残差叶子值 (残差均值)
Leaf 3 年龄≤27.5\\le 27.527.5 1, 3, 6 0, -0.25, -0.25 (−0.25−0.25)/3=−0.167(-0.25 – 0.25)/3 = -0.167(0.250.25)/3=0.167
Leaf 4 年龄>27.5> 27.5>27.5 2, 4, 5, 7, 8 0.75, 0, 0, -0.25, 0 0.75/5=0.1000.75/5 = 0.1000.75/5=0.100
样本性别年龄第1棵树叶子第2棵树叶子正确的 LR 输入
1 25 Leaf 1 Leaf 3 [1, 0, 1, 0]
2 30 Leaf 2 Leaf 4 [0, 1, 0, 1]
3 25 Leaf 2 Leaf 3 [0, 1, 1, 0]
4 35 Leaf 1 Leaf 4 [1, 0, 0, 1]
5 30 Leaf 1 Leaf 4 [1, 0, 0, 1]
6 25 Leaf 2 Leaf 3 [0, 1, 1, 0]
7 35 Leaf 2 Leaf 4 [0, 1, 0, 1]
8 30 Leaf 1 Leaf 4 [1, 0, 0, 1]

特征向量含义:

  • 第 1 维:第 1 棵树 Leaf 1(男)
  • 第 2 维:第 1 棵树 Leaf 2(女)
  • 第 3 维:第 2 棵树 Leaf 3(年龄≤27.5)
  • 第 4 维:第 2 棵树 Leaf 4(年龄>27.5)

5. 第三步:训练 LR 模型

5.1 LR 的预测公式

p^=σ(w⋅x+b)=11+e−(w⋅x+b)
\\hat{p} = \\sigma(w \\cdot x + b) = \\frac{1}{1 + e^{-(w \\cdot x + b)}}
p^=σ(wx+b)=1+e(wx+b)1

其中 xxx 是 4 维特征向量,www 是 4 维权重向量,bbb 是偏置。

5.2 假设训练后的权重

经过梯度下降训练,假设 LR 学到的权重为:
w=[0.1, 0.9, 0.4, −0.2],b=−0.3
w = [0.1, \\ 0.9, \\ 0.4, \\ -0.2], \\quad b = -0.3
w=[0.1, 0.9, 0.4, 0.2],b=0.3

权重的直觉解释:

  • w1=0.1w_1 = 0.1w1=0.1:男性(Leaf 1)对点击影响较小
  • w2=0.9w_2 = 0.9w2=0.9:女性(Leaf 2)对点击影响大(但方向为正,说明女性反而更容易点击?这里只是演示)
  • w3=0.4w_3 = 0.4w3=0.4:年轻用户(Leaf 3)正向影响
  • w4=−0.2w_4 = -0.2w4=0.2:年长用户(Leaf 4)负向影响

实际中权重由数据学习得出,此处仅为演示。

5.3 LR 的权重 w 和偏置 b 是通过梯度下降最小化交叉熵损失

L=−1N∑i=1N[yilog⁡p^i+(1−yi)log⁡(1−p^i)]
L = -\\frac{1}{N} \\sum_{i=1}^{N} [y_i \\log \\hat{p}_i + (1 – y_i) \\log(1 – \\hat{p}_i)]
L=N1i=1N[yilogp^i+(1yi)log(1p^i)]

其中 p^i=σ(w⋅xi+b)\\hat{p}_i = \\sigma(w \\cdot x_i + b)p^i=σ(wxi+b)

梯度更新公式:
wj←wj−η⋅1N∑i=1N(p^i−yi)⋅xi,j
w_j \\leftarrow w_j – \\eta \\cdot \\frac{1}{N} \\sum_{i=1}^{N} (\\hat{p}_i – y_i) \\cdot x_{i,j}
wjwjηN1i=1N(p^iyi)xi,j

b←b−η⋅1N∑i=1N(p^i−yi)
b \\leftarrow b – \\eta \\cdot \\frac{1}{N} \\sum_{i=1}^{N} (\\hat{p}_i – y_i)
bbηN1i=1N(p^iyi)

5.4 例子

用 8 条样本,初始 w=[0,0,0,0],b=0w=[0,0,0,0],b=0w=[0,0,0,0]b=0,学习率 η=0.1η=0.1η=0.1,演示一次迭代。

样本 1:x=[1,0,1,0],y=1x=[1,0,1,0],y=1x=[1,0,1,0]y=1
预测值:p^=σ(0)=0.5\\hat{p} = \\sigma(0) = 0.5p^=σ(0)=0.5

误差:p^−y=0.5−1=−0.5\\hat{p} – y = 0.5 – 1 = -0.5p^y=0.51=0.5

梯度贡献:wj←wj−0.1×(−0.5)×xjw_j \\leftarrow w_j – 0.1 \\times (-0.5) \\times x_jwjwj0.1×(0.5)×xj

w←[0,0,0,0]+0.05×[1,0,1,0]=[0.05,0,0.05,0]w \\leftarrow [0, 0, 0, 0] + 0.05 \\times [1, 0, 1, 0] = [0.05, 0, 0.05, 0]w[0,0,0,0]+0.05×[1,0,1,0]=[0.05,0,0.05,0]

样本 2:x=[0,1,0,1],y=1x=[0,1,0,1],y=1x=[0,1,0,1]y=1

预测值:p^=σ(0.05×0+0×1+0.05×0+0×1)=σ(0)=0.5\\hat{p} = \\sigma\\left(0.05 \\times 0 + 0 \\times 1 + 0.05 \\times 0 + 0 \\times 1\\right) = \\sigma(0) = 0.5p^=σ(0.05×0+0×1+0.05×0+0×1)=σ(0)=0.5

误差:−0.5-0.50.5

w←[0.05,0,0.05,0]+0.05×[0,1,0,1]=[0.05,0.05,0.05,0.05]
w \\leftarrow [0.05, 0, 0.05, 0] + 0.05 \\times [0, 1, 0, 1] = [0.05, 0.05, 0.05, 0.05]
w[0.05,0,0.05,0]+0.05×[0,1,0,1]=[0.05,0.05,0.05,0.05]

样本 3:x=[0,1,1,0],y=0x=[0,1,1,0],y=0x=[0,1,1,0]y=0

预测值:p^=σ(0.05×0+0.05×1+0.05×1+0.05×0)=σ(0.1)≈0.525\\hat{p} = \\sigma\\left(0.05 \\times 0 + 0.05 \\times 1 + 0.05 \\times 1 + 0.05 \\times 0\\right) = \\sigma(0.1) \\approx 0.525p^=σ(0.05×0+0.05×1+0.05×1+0.05×0)=σ(0.1)0.525

误差:0.525−0=0.5250.525 – 0 = 0.5250.5250=0.525

w←[0.05,0.05,0.05,0.05]−0.1×0.525×[0,1,1,0]=[0.05, 0.05−0.0525, 0.05−0.0525, 0.05]=[0.05, −0.0025, −0.0025, 0.05]
\\begin{aligned}
w &\\leftarrow [0.05, 0.05, 0.05, 0.05] – 0.1 \\times 0.525 \\times [0, 1, 1, 0] \\\\
&= [0.05,\\ 0.05 – 0.0525,\\ 0.05 – 0.0525,\\ 0.05] = [0.05,\\ -0.0025,\\ -0.0025,\\ 0.05]
\\end{aligned}
w[0.05,0.05,0.05,0.05]0.1×0.525×[0,1,1,0]=[0.05, 0.050.0525, 0.050.0525, 0.05]=[0.05, 0.0025, 0.0025, 0.05]

样本 4:x=[1,0,0,1],y=1x=[1,0,0,1],y=1x=[1,0,0,1]y=1
预测值:p^=σ(0.05×1+(−0.0025)×0+(−0.0025)×0+0.05×1)=σ(0.1)≈0.525\\hat{p} = \\sigma(0.05 \\times 1 + (-0.0025) \\times 0 + (-0.0025) \\times 0 + 0.05 \\times 1) = \\sigma(0.1) \\approx 0.525p^=σ(0.05×1+(0.0025)×0+(0.0025)×0+0.05×1)=σ(0.1)0.525

误差:0.525−1=−0.4750.525 – 1 = -0.4750.5251=0.475

w←[0.05,−0.0025,−0.0025,0.05]+0.1×0.475×[1,0,0,1]w \\leftarrow [0.05, -0.0025, -0.0025, 0.05] + 0.1 \\times 0.475 \\times [1, 0, 0, 1]w[0.05,0.0025,0.0025,0.05]+0.1×0.475×[1,0,0,1]

=[0.05+0.0475,−0.0025,−0.0025,0.05+0.0475]=[0.0975,−0.0025,−0.0025,0.0975]= [0.05 + 0.0475, -0.0025, -0.0025, 0.05 + 0.0475] = [0.0975, -0.0025, -0.0025, 0.0975]=[0.05+0.0475,0.0025,0.0025,0.05+0.0475]=[0.0975,0.0025,0.0025,0.0975]

继续迭代样本 5~8,经过数百轮后,权重会收敛到某个稳定值。

文档中给出的 [0.1,0.9,0.4,−0.2] 是一个可能的收敛结果示例


6. 第四步:预测新样本

6.1 新样本

假设来了一个新用户:男性,25 岁。

第一步:通过 GBDT 确定叶子节点

  • 第 1 棵树:男性 → Leaf 1
  • 第 2 棵树:年龄 25 ≤ 27.5 → Leaf 3

第二步:生成 LR 输入特征
x=[1, 0, 1, 0]
x = [1, \\ 0, \\ 1, \\ 0]
x=[1, 0, 1, 0]

第三步:LR 计算

z=w⋅x+b=0.1×1+0.9×0+0.4×1+(−0.2)×0+(−0.3)=0.1+0+0.4+0−0.3=0.2p^=σ(0.2)=11+e−0.2≈11+0.8187≈0.550
\\begin{aligned}
z &= w\\cdot x + b = 0.1 \\times 1 + 0.9 \\times 0 + 0.4 \\times 1 + (-0.2) \\times 0 + (-0.3) \\\\
&= 0.1 + 0 + 0.4 + 0 – 0.3 = 0.2 \\\\
\\hat{p} &= \\sigma(0.2) = \\frac{1}{1+e^{-0.2}} \\approx \\frac{1}{1+0.8187} \\approx 0.550
\\end{aligned}
zp^=wx+b=0.1×1+0.9×0+0.4×1+(0.2)×0+(0.3)=0.1+0+0.4+00.3=0.2=σ(0.2)=1+e0.211+0.818710.550

预测结果:该用户点击概率为 55.0%。

6.2 再预测一个样本:女性,30 岁

GBDT 路径:

  • 第 1 棵树:女性 → Leaf 2
  • 第 2 棵树:年龄 30 > 27.5 → Leaf 4

LR 输入特征:
x=[0, 1, 0, 1]
x = [0, \\ 1, \\ 0, \\ 1]
x=[0, 1, 0, 1]

LR 计算:
z=w⋅x+b=0.1×0+0.9×1+0.4×0+(−0.2)×1+(−0.3)=0+0.9+0−0.2−0.3=0.4p^=σ(0.4)=11+e−0.4≈11+0.6703≈0.599
\\begin{aligned}
z &= w\\cdot x + b = 0.1 \\times 0 + 0.9 \\times 1 + 0.4 \\times 0 + (-0.2) \\times 1 + (-0.3) \\\\
&= 0 + 0.9 + 0 – 0.2 – 0.3 = 0.4 \\\\
\\hat{p} &= \\sigma(0.4) = \\frac{1}{1+e^{-0.4}} \\approx \\frac{1}{1+0.6703} \\approx 0.599
\\end{aligned}
zp^=wx+b=0.1×0+0.9×1+0.4×0+(0.2)×1+(0.3)=0+0.9+00.20.3=0.4=σ(0.4)=1+e0.411+0.670310.599

预测结果:该用户点击概率为 59.9%。


7. 对比:如果只用 LR,不用 GBDT

如果直接拿原始特征(年龄、性别、类别)做 one-hot 后输入 LR:

  • 性别:2 维 → [男, 女]
  • 年龄:连续值,需要分桶 → 假设分 2 桶 → [≤27.5, >27.5]
  • 类别:2 维 → [电子, 服饰]

总共 6 维特征。LR 只能学习线性加权,无法自动捕捉"男性 + 年轻"这种组合效应。

而 GBDT + LR 中:

  • GBDT 自动发现了"性别"和"年龄"是最重要的分裂特征;
  • 叶子节点编码了特征组合(如"男性 + 年轻"对应 Leaf 1 + Leaf 3);
  • LR 只需在这些组合特征上学习线性权重,就能捕捉非线性关系。

8. 完整流程图

原始特征(年龄、性别、类别)


┌─────────────────────────────────────┐
│ GBDT(N 棵树) │
│ 第1棵树:按性别分裂 → Leaf 1/2 │
│ 第2棵树:按年龄分裂 → Leaf 3/4 │
│ … │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ 叶子节点 one-hot 编码拼接 │
│ [0, 1, 1, 0](4维特征) │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ LR(逻辑回归) │
│ z = w·x + b │
│ p = sigmoid(z) │
└─────────────────────────────────────┘


最终 CTR 预估值


9. 总结

组件作用本例中的体现
GBDT 自动发现特征组合,生成高阶交叉特征 第 1 棵树发现"性别"最重要,第 2 棵树发现"年龄"最重要
叶子节点编码 将特征组合转化为 one-hot 向量 男性+年轻 → [1,0,1,0]
LR 在组合特征上学习权重,输出最终 CTR z=1.0z = 1.0z=1.0p=55.0%p = 55.0\\%p=55.0%

一句话记住 LR + GBDT:

GBDT 负责"找组合"(自动特征工程),LR 负责"给权重"(融合打分)。两者串联,既省去了人工特征工程的成本,又保留了 LR 可解释、易上线的优势,是工业界推荐系统融合阶段的经典方案。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 辑度组合 - LR + GBDT 组合模型
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!