在这个 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 < 15
、is male == Y
和 use computer daily == Y
),tree1 产生 2
,tree2 产生 0.9
。
读这个
https://towardsdatascience.com/xgboost-mathematics-explained-58262530904a
然后这个
https://medium.com/@gabrieltseng/gradient-boosting-and-xgboost-c306c1bcfaf5
和附录
我同意@user1808924。不过,我认为仍然值得解释一下 XGBoost 是如何在幕后工作的。
- 叶子的分数是什么意思?
首先,你在树叶上看到的分数不是概率。它们是回归值。
在梯度提升树中,只有回归树。为了预测一个人是否喜欢电脑游戏,模型 (XGboost) 会将其视为回归问题。此处的标签变为 1.0 表示是,0.0 表示否。然后,XGboost 将回归树放入进行训练。树当然会 return 类似 +2、+0.1、-1 的东西,我们在树叶处得到。
我们总结所有“原始分数”,然后通过应用sigmoid函数将它们转换为概率。
- 如何计算叶子中的分数?
叶子分数(w
)的计算方式是this formula:
w = - (sum(gi) / (sum(hi) + lambda))
其中 g
和 h
是一阶导数 (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 (默认为 平均绝对误差 ),...叶中所有观察值的标签)。
我们计算每个人的 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
最后一点:在实践中,我们在绘制树时看到的 leaf 中的分数有点不同。它将乘以学习率,即 w * learning_rate
.
我正在看下面的图片。
谁能解释一下它们是如何计算的? 我虽然 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 < 15
、is male == Y
和 use computer daily == Y
),tree1 产生 2
,tree2 产生 0.9
。
读这个
https://towardsdatascience.com/xgboost-mathematics-explained-58262530904a
然后这个
https://medium.com/@gabrieltseng/gradient-boosting-and-xgboost-c306c1bcfaf5
和附录
我同意@user1808924。不过,我认为仍然值得解释一下 XGBoost 是如何在幕后工作的。
- 叶子的分数是什么意思?
首先,你在树叶上看到的分数不是概率。它们是回归值。
在梯度提升树中,只有回归树。为了预测一个人是否喜欢电脑游戏,模型 (XGboost) 会将其视为回归问题。此处的标签变为 1.0 表示是,0.0 表示否。然后,XGboost 将回归树放入进行训练。树当然会 return 类似 +2、+0.1、-1 的东西,我们在树叶处得到。
我们总结所有“原始分数”,然后通过应用sigmoid函数将它们转换为概率。
- 如何计算叶子中的分数?
叶子分数(w
)的计算方式是this formula:
w = - (sum(gi) / (sum(hi) + lambda))
其中 g
和 h
是一阶导数 (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 (默认为 平均绝对误差 ),...叶中所有观察值的标签)。
我们计算每个人的 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
最后一点:在实践中,我们在绘制树时看到的 leaf 中的分数有点不同。它将乘以学习率,即 w * learning_rate
.