博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XGBOOST原理解析
阅读量:6813 次
发布时间:2019-06-26

本文共 1491 字,大约阅读时间需要 4 分钟。

hot3.png

1.引言

最近,因为一些原因,自己需要做一个小范围的XGBoost的实现层面的分享,于是干脆就整理了一下相关的资料,串接出了这份report,也算跟这里的问题相关,算是从一个更偏算法实现的角度,提供一份参考资料吧。这份report从建模原理、单机实现、分布式实现这几个角度展开。
在切入到细节之前,特别提一下,对于有过GBDT算法实现经验的同学(与我有过直接connection的同学,至少有将四位同学都有过直接实现GBDT算法的经验)来说,这份report可能不会有太多新意,这更多是一个技术细节的梳理,一来用作技术分享的素材,二来也是顺便整理一下自己对这个问题的理解,因为自己实际上并没有亲自动手实现过分布式的GBDT算法,所以希望借这个机会也来梳理一下相关的知识体系。本文基于XGBoost官网代码[12],commit是b3c9e6a0db0a7eb755949ac6b26e3ef805738350。
2.建模原理
我个人的理解,从算法实现的角度,把握一个机器学习算法的关键点有两个,一个是loss function的理解(包括对特征X/标签Y配对的建模,以及基于X/Y配对建模的loss function的设计,前者应用于inference,后者应用于training,而前者又是后者的组成部分),另一个是对求解过程的把握。这两个点串接在一起构成了算法实现的主框架。具体到XGBoost,也不出其外。
XGBoost的loss function可以拆解为两个部分,第一部分是X/Y配对的建模,第二部分是基于X/Y建模的loss function的设计。
2.1. X/Y建模
作为GBDT算法的具体实现,XGBoost代表了Tree Model的一个特例(boosting tree v.s. bagging tree),基本的思想用下图描述起来会更为直观:

image

如果从形式化的角度来观察,则可以描述如下:

image

其中F代表一个泛函,表征决策树的函数空间,K表示构成GBDT模型的Tree的个数,T表示一个决策树的叶子结点的数目, w是一个向量。看到上面X/Y的建模方式,也许我们会有一个疑问:上面的建模方式输出的会是一个浮点标量,这种建模方式,对于Regression Problem拟合得很自然,但是对于classification问题,怎样将浮点标量与离散分类问题联系起来呢?理解这个问题,实际上,可以通过Logistic Regression分类模型来获得启发。我们知道,LR模型的建模形式,输出的也会是一个浮点数,这个浮点数又是怎样跟离散分类问题(分类面)联系起来的呢?实际上,从广义线性模型[13]的角度,待学习的分类面建模的实际上是Logit[3],Logit本身是是由LR预测的浮点数结合建模目标满足Bernoulli分布来表征的,数学形式如下:

image

对上面这个式子做一下数学变换,能够得出下面的形式: 

image

这样一来,我们实际上将模型的浮点预测值与离散分类问题建立起了联系。 
相同的建模技巧套用到GBDT里,也就找到了树模型的浮点预测值与离散分类问题的联系: 

image

考虑到GBDT应用于分类问题的建模更为tricky一些,所以后续关于loss function以及实现的讨论都会基于GBDT在分类问题上的展开,后续不再赘述。
2.2. Loss Function设计 
分类问题的典型Loss建模方式是基于极大似然估计,具体到每个样本上,实际上就是典型的二项分布概率建模式[1]: 

转载于:https://my.oschina.net/u/3611008/blog/1837083

你可能感兴趣的文章
List 与 Map的常用方法
查看>>
分享下我的 netbeans 的配色方案
查看>>
《架构之美》摘录二
查看>>
SDN第五次上机作业--基于组表的简单负载均衡
查看>>
Phone Bills【PAT 1016题】--- 电话账单结算
查看>>
添加下拉框00-23 finereport公式
查看>>
springMvc--接受日期类型参数处理
查看>>
神奇算式
查看>>
ARTS打卡计划第一周-Tips-ControllerAdvice的使用
查看>>
Perl语言
查看>>
原型模式 c#
查看>>
算法之选择排序
查看>>
js实现栈结构
查看>>
iOS 项目改名~~~~~
查看>>
赋值运算符
查看>>
深入理解Flink ---- 系统内部消息传递的exactly once语义
查看>>
怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
查看>>
牛客--二维数组中的查找
查看>>
svg基础知识体系建立
查看>>
Verilog设计中的锁存器
查看>>