gradientboosting回归(平方损失)比较容易理解:
1.训练一棵树拟合残差
2.输入训练数据到这棵树,输出预测值
3.用预测值更新残差
4.重复1-3
对于分类问题,并不是像决策树分类那样用投票来完成的。gradientboosting分类中,boosting的对象也是回归树。在回归问题中,树输出的预测值是所在节点的平均值,残差就是标签值减去输出值,这和平方损失的梯度是一致的。当然,这可能也带来了那个广为流传的谬误:gbdt是一阶导,xgboost是二阶导。
在分类问题中,回顾逻辑回归,预测值是输出值经过sigmoid变换得到的。那输出值是什么呢?不能也是所在节点的平均值吧?
在论文fht00中,friedman称这种算法为logitboost。r包gbm、scikit-learn的gradientboostingclassifier实际上都是实现了logitboost。


输出值不是所在节点的平均值,而是所在节点经过sigmoid变换后的平均值除以一个权重。
这个y一弯又叫pseudo-respond,是y经过sigmoid变换得到的。有人看到这会说,这不就是一阶导吗。没错,但你把boosting和iteratively reweighted least squares搞混了。
那个二阶导,实际包含在输出值γ的推导里了
这是你的损失函数

这是你的一阶导,为了求极大似然,你想让它为零

然后你用牛顿-拉夫森算法求二阶导

然后你可以更新你的参数

fht00帮你算好了


再看看xgboost的论文

xgboost用g表示一阶导,h表示二阶导,看看它的w,除了多了一个正则化系数,跟logitboost并没有区别。所以,xgboost相比logitboost的优化并不在于几阶导。
发表评论