XGBoost代码走读分析笔记

http://blog.csdn.net/a819825294/article/details/51206410#t6
读了 雪伦大佬的走读分析,非常清晰,我写一下自己的理解,狗尾续貂了

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,推荐直接看
http://blog.csdn.net/a819825294/article/details/51206410#t6
 

你可能感兴趣的:(机器学习,学习笔记,随笔)