GBDT资料:
http://suanfazu.com/t/gbdt-die-dai-jue-ce-shu-ru-men-jiao-cheng/135
http://suanfazu.com/t/gbdt-mart-gai-nian-jian-jie/133
GBDT vs xgboost:
作者:wxquare
链接:https://www.zhihu.com/question/41354392/answer/103119723
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
5.传统GBDT以CART作为基分类器,xgboost还支持线性分类器
链接:https://www.zhihu.com/question/41354392/answer/103119723
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
1. xgboost在目标函数中加入了正则化项,当正则化项为0时与传统的GDBT的目标函数相同
2. xgboost在迭代优化的时候使用了目标函数的泰勒展开的二阶近似,paper中说能加快优化的过程!!xgboost可自定义目标函数,但是目标函数必须二阶可导也是因为这个。GDBT中只用了一阶导数。
3. xgboost寻找最佳分割点时,考虑到传统贪心法效率比较低,实现了一种近似贪心法,除此之外还考虑了稀疏数据集、缺失值的处理,这能大大提升算法的效率。paper中提到在一个稀疏数据集中测试,发现速度提升了50倍。
4. xgboost在算法实现时做了很多优化,大大提升了算法的效率,感叹陈天奇大牛深厚计算机基础!
2. xgboost在迭代优化的时候使用了目标函数的泰勒展开的二阶近似,paper中说能加快优化的过程!!xgboost可自定义目标函数,但是目标函数必须二阶可导也是因为这个。GDBT中只用了一阶导数。
3. xgboost寻找最佳分割点时,考虑到传统贪心法效率比较低,实现了一种近似贪心法,除此之外还考虑了稀疏数据集、缺失值的处理,这能大大提升算法的效率。paper中提到在一个稀疏数据集中测试,发现速度提升了50倍。
4. xgboost在算法实现时做了很多优化,大大提升了算法的效率,感叹陈天奇大牛深厚计算机基础!
- 对训练的每个特征排序并且以块的的结构存储在内存中,方便后面迭代重复使用,减少计算量,不仅如此,在不同的特征属性上采用多线程并行方式寻找最佳分割点
- 上述的优化导致每个样本的梯度信息在内存中不连续,直接累加有可能会导致cache-miss,所以xgboost先将样本的统计信息取到线程的内部buffer,然后再进行小批量的累加
- xgboost在实现时考虑了当训练数据很大、内存空间不够时,如何有效的利用磁盘空间?主要是利用了分块、预取、压缩、多线程协作的思想。