它在每棵树的尽头吗?还是只有在所有树木都建成之后?我试图从这两种方式思考,但没有得到清晰的画面。
我们能否更关注“在训练模型之间应用损失函数”的部分?我试图了解如何应用梯度下降来最小化目标函数函数。
http://www.saedsayad.com/docs/xgboost.pdf中的第 36 张幻灯片
到达叶子的数据点将被分配一个权重。权重是预测
权重是如何分配的?重量是怎么计算的?为什么要再次预测体重?有人可以对此有所了解吗?
它在每棵树的尽头吗?还是只有在所有树木都建成之后?我试图从这两种方式思考,但没有得到清晰的画面。
我们能否更关注“在训练模型之间应用损失函数”的部分?我试图了解如何应用梯度下降来最小化目标函数函数。
http://www.saedsayad.com/docs/xgboost.pdf中的第 36 张幻灯片
到达叶子的数据点将被分配一个权重。权重是预测
权重是如何分配的?重量是怎么计算的?为什么要再次预测体重?有人可以对此有所了解吗?
我想把一些历史观点加入到这...
初始算法称为AdaBoost。与大多数机器学习不同,该算法起源于硬理论。作者试图回答以下理论问题:
是否有可能以某种方式结合弱模型并创建一个非常准确的预测器?
弱模型是几乎不比机会更好的模型。想想这个问题。这是一个相当哲学的问题……而且,碰巧,它可以用硬数学来回答。
他们实际上证明了是的。他们的论文实际上值得一读。此后,他们从不同的角度发表了许多有趣的论文,例如使用博弈论。
AdaBoost 算法也非常简单,值得一试,因为它是 xgboost 的基础。
AdaBoost 适用于任何型号。唯一的限制是该模型支持为每个观察值赋予权重。这是因为它通过增加(或减少)与每个观察相关的权重来顺序训练模型,以使该观察更重要(或不那么重要)。
很酷的是该算法不太可能过拟合。但请注意,这是一种经验主张,而不是理论主张。该算法可能会过拟合,但已发现(根据经验)它非常有弹性。
该算法已扩展为梯度提升,具有更灵活的损失函数。该算法是由发明随机森林的同一个人改编的 AdaBoost 算法。他们并不像 AdaBoost 的作者那样关心理论问题,他们只是想让算法更加灵活和高效。例如,他们还使用所有以前的弱模型更新权重,而不仅仅是最后训练的模型。
xgboost只是 Gradient Boosting 的智能实现。您可以在 wikipedia中查看基本算法。每个决策树都按顺序进行训练,并根据当前集成的误差计算权重。
我能听到你说:
什么?xgboost 按顺序训练树?那么 xgboost 怎么这么快呢?
这个网站解释得很好。虽然树是按顺序训练的,但每个单独的决策树都是通过使用高度创造性的技术并行训练的。最重要的是,相同深度的节点不相互依赖,因此您可以将它们并行化。
长话短说:损失函数应用于训练模型之间。
在进行预测时,可以并行使用整个集成。
清除 XgBoost 中梯度下降的困惑
Xgboost 中不使用梯度下降。如果您查看 XgBoost 的广义损失函数,它有 2 个参数与我们想要添加到模型中的下一个最佳树(弱学习器)的结构有关:叶子分数和叶子数量。梯度下降不能用来学习它们。损失函数中的其他变量是叶子的梯度(想想残差)。这就是该算法被称为梯度提升的原因。它与梯度下降无关。
那么我们如何在 XgBoost 中学习以及在算法期间何时调用梯度提升?
理想情况下,我们需要损失函数来找到能够最大程度减少损失的下一个最佳树(弱学习器)。所以如果你对损失函数求导找到它的最小值,你会得到下面的评分函数来找到最好的树——
迭代所有可能的树,得分最低的树是我们的下一个最好的树。但是扫描所有可能的树是不切实际的。
因此,损失函数被进一步修改以找到下一个最佳分割,现在您可以将其称为增益。方程如下- 这里,gamma是添加额外叶子的成本,lambda是L2正则化参数,G和H分别是损失的导数和二阶导数。
现在我们有了计算每个分割增益的方程,使用这个方程和 ta-daa 找到最佳分割!那是梯度提升:)
要详细了解这一点,请阅读此内容。