参考:http://www.52cs.org/?p=429
模型:
目标函数:
模型学习:additive training:
如何选择每一轮加入什么 f 呢?答案是非常直接的,选取一个 f 来使得我们的目标函数尽量最大地降低。
这个公式可能有些过于抽象,我们可以考虑当l是平方误差的情况。这个时候我们的目标可以被写成下面这样的二次函数:
泰勒展开近似:
更加一般的,对于不是平方误差的情况,我们会采用如下的泰勒展开近似来定义近似的目标函数,方便我们进行这一步的计算。
这一个目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数
树的复杂度
对于f的定义做一下细化,把树拆分成结构部分q和叶子权重部分 w
树的复杂度:
关键步骤
通过这个目标函数来求解出最好的w,以及最好的w对应的目标函数最大的增益:
这里只涉及到了如何求一个一维二次函数的最小值的问题:
枚举所有不同树结构的贪心法
枚举所有可能的分割方案。要枚举所有 x<a 这样的条件,对于某个特定的分割a我们要计算a左边和右边的导数和。
观察这个目标函数,大家会发现第二个值得注意的事情就是引入分割不一定会使得情况变好,因为我们有一个引入新叶子的惩罚项。优化这个目标对应了树的剪枝, 当引入的分割带来的增益小于一个阀值的时候,我们可以剪掉这个分割。