我同意@user1808924。我认为仍然值得解释一下 XGBoost 在幕后的工作原理。
首先,你在叶子中看到的分数不是概率。它们是回归值。
在梯度提升树中,只有回归树。为了预测一个人是否喜欢电脑游戏,模型(XGboost)会将其视为回归问题。这里的标签变成 1.0 表示是,0.0 表示否。然后,XGboost 将回归树放入训练中。当然,树会返回 +2、+0.1、-1 之类的值,这是我们在叶子处得到的。
我们将所有“原始分数”相加,然后通过应用 sigmoid 函数将它们转换为概率。
叶子分数(
w
)通过这个公式计算:
w = - (sum(gi) / (sum(hi) + lambda))
其中
g
和 h
是一阶导数 (gradient) 和二阶导数 (hessian)。
为了演示,我们选择第一棵树具有
-1
值的叶子。假设我们的目标函数是 均方误差 (mse) 并且我们选择 lambda = 0
。
有了 mse,我们就有了
g = (y_pred - y_true
) 和 h=1
。我只是去掉了常数 2,事实上,你可以保留它,结果应该保持不变。另一个注意事项:在 t_th 迭代中,y_pred
是我们在 (t-1)th 迭代之后的预测(迄今为止我们得到的最好预测)。
一些假设:
y_true = 0
)。1
(即,我们猜测所有人都喜欢游戏。请注意,我故意选择 1
,以获得与第一棵树相同的结果。事实上,初始预测可以是叶子中所有观测值标签的 mean(默认为 均方误差)、median(默认为 平均绝对误差)。我们计算每个人的
g
和 h
:
g_girl = y_pred - y_true = 1 - 0 = 1
。同样,我们有g_grandpa = g_grandma = 1
。h_girl = h_grandpa = h_grandma = 1
将
g, h
值代入上面的公式,我们有:
w = -( (g_girl + g_grandpa + g_grandma) / (h_girl + h_grandpa + h_grandma) ) = -1
最后一点:在实践中,我们在绘制树时看到的叶子分数有点不同。它将乘以学习率,即
w * learning_rate
。
叶元素(又名“分数”)的值 -
+2
、+0.1
、-1
、+0.9
和 -0.9
- 由 XGBoost 算法在训练期间设计。在本例中,XGBoost 模型使用一个数据集进行训练,其中小男孩 (+2
) 看起来比小女孩 (+0.1
) “更大”。如果您知道响应变量是什么,那么您可能可以进一步解释/合理化这些贡献。否则,请按原样接受这些值。
对于对样本进行评分,则第一个加数由tree1产生,第二个加数由tree2产生。对于小男孩(
age < 15
、is male == Y
和 use computer daily == Y
),tree1 产生 2
,tree2 产生 0.9
。