XGBoost代码走读分析笔记

读了雪伦大佬的走读分析,非常清晰,我写一下自己的理解,狗尾续貂了

XGBoost运行流程:
简略来说,XGBoost只做两件事:
1.main函数调用InitModel初始化模型,初始化的时候选择Loss,及分类器
2.迭代用Boost方法更新模型(UpdateOneIter),每次更新的时候做几个操作:PredictRaw,GetGradient,DoBoost。
分别是计算残差,计算梯度,进行Boost

1.其中,DoBoost会根据残差新建基分类器,并调用tree_updater的Update方法进行树的建立
2.而tree_updater在Create方法中会建立一堆的服务,包括ColMaker,SketchMaker,TreeRefresher,TreePruner(Prune,删除),HistMaker,TreeSyncher

这些服务会进行各种各样的操作,“这样设计,关于建树的主要操作都可以通过Updater链的方式串接起来,比较一致干净,算是Decorator设计模式[4]的一种应用。

其中需要注意学习一下建树的过程:
1.ParallelFindSplit
为需要分割的叶节点,调用OpenMP分布地计算每个特征的最优split point,然后汇总出这个特征的最优split point,并枚举选出此特征中最优的split point【是个MapReduce过程】
2.SyncBestSolution
每个OpenMP线程会给出一个特征的最优split point,然后进行全局sync,获取最优的特征的最优split point
3.ResetPosition
根据上一步选出来的分割更新树和统计量(InitNewNode)


更具体的,雪伦大佬的笔记已经heavily documented,推荐直接看
 

发布了51 篇原创文章 · 获赞 62 · 访问量 12万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览