通常情况下,我们采用贪心策略来生成决策树的每个节点。
1. 从深度为 0 的树开始,对每个叶节点枚举所有的可用特征 2. 针对每个特征,把属于该节点的训练样本根据该特征值升序排列,通过线性扫描的方式来决定该特征的最佳分裂点,并记录该特征的最大收益(采用最佳分裂点时的收益) 3. 选择收益最大的特征作为分裂特征,用该特征的最佳分裂点作为分裂位置,把该节点生长出左右两个新的叶节点,并为每个新节点关联对应的样本集 4. 回到第 1 步,递归执行到满足特定条件为止
3.5 收益的计算
如何计算每次分裂的收益呢?假设当前节点记为 C,分裂之后左孩子节点记为 L,右孩子节点记为 R,则该分裂获得的收益定义为当前节点的目标函数值减去左右两个孩子节点的目标函数值之和:
根据等式(8) 可得:
其中,
项表示因为增加了树的复杂性(该分裂增加了一个叶子节点)带来的惩罚。
最后,总结一下 GBDT 的学习算法: 1. 算法每次迭代生成一颗新的决策树 ; 2. 在每次迭代开始之前,计算损失函数在每个训练样本点的一阶导数和二阶导数 ; 3. 通过贪心策略生成新的决策树,通过等式(7) 计算每个叶节点对应的预测值 4. 把新生成的决策树
添加到模型中:
结合那本书,计算举例如下:
精确的数字是0.478,下面用的是直接截掉尾巴的
这里的L(y,f(x)),就是收益
参考https://cloud.tencent.com/developer/article/1005611
https://blog.csdn.net/sb19931201/article/details/52506157
http://tieba.baidu.com/p/3157175617?