在这个 XGBoost 树中如何计算休假分数?

How leave's scores are calculated in this XGBoost trees?

我正在看下面的图片。

谁能解释一下它们是如何计算的? 我虽然 N 为 -1,Yes 为 +1,但后来我无法弄清楚这个小女孩是如何得到 .1 的。但这对树 2 也不起作用。

叶元素(又名 "scores")的值 - +2+0.1-1+0.9-0.9 - 是由 XGBoost 算法在训练期间设计。在这种情况下,XGBoost 模型是使用一个数据集训练的,其中小男孩 (+2) 以某种方式出现 "greater" 而不是小女孩 (+0.1)。如果您知道响应变量是什么,那么您可能 interpret/rationalize 进一步做出这些贡献。否则,请按原样接受这些值。

对于打分样本,那么第一个加数由tree1产生,第二个加数由tree2产生。对于小男孩 (age < 15is male == Yuse computer daily == Y),tree1 产生 2,tree2 产生 0.9

读这个

https://towardsdatascience.com/xgboost-mathematics-explained-58262530904a

然后这个

https://medium.com/@gabrieltseng/gradient-boosting-and-xgboost-c306c1bcfaf5

和附录

https://gabrieltseng.github.io/appendix/2018-02-25-XGB.html

我同意@user1808924。不过,我认为仍然值得解释一下 XGBoost 是如何在幕后工作的。

  • 叶子的分数是什么意思?

首先,你在树叶上看到的分数不是概率。它们是回归值。

在梯度提升树中,只有回归树。为了预测一个人是否喜欢电脑游戏,模型 (XGboost) 会将其视为回归问题。此处的标签变为 1.0 表示是,0.0 表示否。然后,XGboost 将回归树放入进行训练。树当然会 return 类似 +2、+0.1、-1 的东西,我们在树叶处得到。

我们总结所有“原始分数”,然后通过应用sigmoid函数将它们转换为概率。

  • 如何计算叶子中的分数?

叶子分数(w)的计算方式是this formula

w = - (sum(gi) / (sum(hi) + lambda))

其中 gh 是一阶导数 (gradient) 和二阶导数 (hessian ).

为了演示,让我们选择第一棵树的 -1 值的叶子。假设我们的 objective 函数是 mean squared error (mse) 并且我们选择 lambda = 0.

使用 mse,我们有 g = (y_pred - y_true) 和 h=1。我只是去掉了常量2,其实你可以保留它,结果应该保持不变。另一个注意事项:在 t_th 迭代中,y_pred 是我们在 (t-1)th 迭代之后的预测(到那个时候我们得到的最好的)。

一些假设:

  • 女孩、爷爷和奶奶不喜欢电脑游戏(每人y_true = 0)。
  • 初始预测对于所有 3 个人都是 1(即,我们猜测所有人都喜欢游戏。请注意,我选择 1 是为了获得与第一棵树相同的结果. 事实上,初始预测可以是 mean(默认为 mean squared error)median (默认为 平均绝对误差 ),...叶中所有观察值的标签)。

我们计算每个人的 gh

  • 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

最后一点:在实践中,我们在绘制树时看到的 leaf 中的分数有点不同。它将乘以学习率,即 w * learning_rate.