前言
前面写过两篇关于GBDT与XGBoost的原理,对GBDT和XGBoost的理解也略微的深入了一些,在此总结一下两者的区别与联系。
关于GBDT
https://blog.csdn.net/Daverain/article/details/96702696
关于XGBoost
https://blog.csdn.net/Daverain/article/details/99570424
正文
XGBoost是一个工程框架,做了很多的性能优化
GBDT更多的是一种算法,XGBoost则是算法在工程上的实现。
在XGBoost中,做了很多工程上的优化,同时也带来了一些近似。
1.分位图算法,有效降低了寻找候选分裂特征以及分割点的时间。
2.特征预排序,将特征以列块的形式存入内存,方便每次split时候查找。
3.缓存优化,在查找特征的梯度信息时,优化了样本信息分散,查找不连续的问题。
过拟合控制
在GBDT中,只能通过迭代次数或树的深度隐式的控制模型的复杂度。
在XGBoost中,显式的增加了正则化项,用来控制过拟合问题;
同时,XGBoost提供了行采样、列采样的功能,也可以控制过拟合问题;
最后,XGBoost也提供了Shrink