在看gbdt、xgboost原理介绍时,经常可以看到从原始的cost function推导到一个经过泰勒公式展开的公式,最终形态是这个样子:,
文章来源:https://cloud.tencent.com/developer/article/1005611。然后根据这个公式计算哪种feature split能带来最大的cost减少。
但我的问题是,为什么需要推导到这种形态才计算cost的变化呢?原始的cost简单明了:
就是直接带入每个data就可以得到一个cost了,也可以对每种feature split进行计算。
第一个公式的意义何在?
2个回答
1.对于regression的square loss,只有二阶导数,你给的两个公式相等,不需要再讨论。
2.对于logistic regression的logistic-loss,两个公式不同:
2.1, 原始loss计算量更大,二阶近似计算量小,还有分割点的近似计算。
2.2 二阶近似解更稳定。
xgboost论文参考论文[12]里讲到用原始loss,存在numerically unstable问题,用二阶近似loss得到的每棵树鲁棒性更强,结果更稳定。
wiki中关于Gentle AdaBoost 和AdaBoost的区别是:
我理解是,本来每棵树学习的是残差。如果是贪婪的学习“准确”的残差,会存在“Z”字型的学习曲线,步长过大,残差的符号会变化,残差会振荡减小,收敛更慢。loss的二阶近似,相当于用牛顿法循环减小残差,(一棵树是一个循环),类似加了正则项,减小了残差符号振荡的可能性。
SofaSofa数据科学社区DS面试题库 DS面经