查看原文:http://www.wyblog.cn/2016/11/25/xgboost%e6%96%87%e7%8c%ae%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0/XGboost的学习资料主要为以下两个。 其一是PPT资料:
http://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf
其二是论文资料:
https://arxiv.org/pdf/1603.02754v3
先看PPT,搞懂了XGboost的原理后,再看论文就轻松多了。
先总结
先总结下xgboost。实际上,xgboost全名叫Extreme Gradient Boosting,是由陈天奇大神开发的。从名字上来看,其实它属于gradien tree的一个分支,它并不是和GBDT处于并列的关系,它是在GBDT上做了算法改进,使得算法适应新更强。那么,具体改进了哪些地方呢?
在模型上,xgboost的泛化能力更强,原因在于其损失函数的构建上。传统的树模型损失函数只考虑了经验损失,即预测值与真实值得偏差作为损失函数的目标,但xgboost在损失函数中加入了正则化项,用于对树结构复杂度的控制,它包含了两项,一项是叶子节点的个数T,另一项是叶子输出score值ω的L2范数,它能够有效地避免过拟合,这也正是文章中反复提到的要平衡 bias-variance tradeoff,即预测准确性以及模型简洁性之间的平衡。
在损失函数上,传统的GBDT采用的是一阶导数,即用的梯度信息,而xgboost用了泰勒公式进行二阶导数的展开,并且,在文章中提到了,损失函数其实是可以自定义的,可以用Square loss,可以用Logistic loss,这也正是它优点之一,scalable。
在每一轮的迭代后,迭代出的树都会被乘以一个小于1的权重ε,它是为了给下一轮及以后的迭代预留大的空间,