赞
踩
XGBoost 最初是由 Tianqi Chen 作为分布式(深度)机器学习社区(DMLC)组的一部分的一个研究项目开始的。XGBoost后来成为了Kaggle竞赛传奇——在2015年的時候29个Kaggle冠军队伍中有17队在他们的解决方案中使用了XGboost。人们越来越意识到XGBoost的强大威力。夸张一点说,如果你不会XGboost,那你参加Kaggle竞赛就是去送人头的。
XGboost到底是什么呢?Tianqi Chen在XGboost的论文中写道:”Tree boosting is a highly effective and widely used machine learning method. In this paper, we describe a scalable end-to-end tree boosting system called XGBoost, which is used widely by data scientists to achieve state-of-the-art results on many machine learning challenges.“[1] 总结一下,XGBoost是一个可拓展的Tree boosting算法,被广泛用于数据科学领域。
XGBoost可以说是GBDT(Gradient Boosting Decision Tree)梯度提升树的一个改进版本。XGBoost中的X代表的就是eXtreme(极致),XGBoost能够更快的、更高效率的训练模型。这就是为什么XGBoost可以说似乎GBDT的一个改进版本。正是得益于XGBoost的高效率,使得她成为数据竞赛中的一大杀器。
想要了解一个算法,首先得从宏观上知道这个算法是怎么工作的:1、算法的具体形式;2、怎么做出预测
XGboost的可视化(如下图,一个由两棵决策树组成的XGBoost)
重点:
1、XGboost的基本组成元素是:决策树;我们将这些决策树成为”弱学习器“,这些”弱学习器“共同组成了XGboost
2、组成XGBoost的决策树之间是有先后顺序的;后一棵决策树的生成会考虑前一棵决策树的预测结果,即将前一棵决策树的偏差考虑在内(在目标函数中有体现)
3、生成每棵决策树使用的数据集,是整个数据集。所以可以将每棵决策树的生成都看作是一个完整的决策树生成过程
一个新样本的预测:新样本依次进入XGBoost的每棵决策树。在第一棵决策树,有一个预测值;在第二棵决策树,有一个预测值,依次类推···直到进入完所有”弱学习器“(决策树)。最后,将“在每一颗决策树中的值”相加,即为最后预测结果。
举例:还是刚刚那张图,样本“儿子”在tree1中的预测值为+2,在tree2中为+0.9。将两个值相加,2+0.9=2.9,所以XGboost最后预测样本“儿子”的值为2.9
到这里,我们已经知道了一个XGBoost模型到底是什么工作的了。那XGboost模型到底是怎么生成的呢?XGboost中的“弱学习器”是怎么生成的?
了解机器学习的都知道,要评价我们产生的模型是否是最好的,其依据是“目标函数”。目标函数越小,这个模型才越是我们想要的。刚刚提到,XGboost中的“弱学习器”是“决策树”。在经典的“决策树”算法中,ID3的目标函数基于“信息熵”,CART的目标函数基于“GINI系数”。而在XGboost中,“决策树“的目标函数引入了”偏差“这个变量,这也是XGBoost的魅力所在。
总结一下:XGboost的”弱学习器“是”决策树“,每棵”决策树”都是目标函数值最小时的模型。只有这棵“决策树”的目标函数值最小,才会被选为“弱学习器”。
要想清楚了解XGBoost的原理,需要对其目标函数进行数学上的解析。这样,我们才能知道,每一个”弱学习器“是怎么生成的。
我们已经知道,要生成一棵好的决策树,目标是:是其目标函数值最小。那问题是,我们该如何使得其最小呢?其中,涉及到两个问题:
问题1:怎么设置叶子节点的值?
问题2:如何进行结点的分裂(怎么构造树的结构)?
围绕问题1问题,笔者对目标函数进行了手写的数学详解
第t个决策树的目标函数公式如下
1、 l ( y i , y ^ i ( t − 1 ) ) l({y}_{i},\widehat{y}_{i}^{(t-1)}) l(yi,y i(t−1)) 表示与 y i , y ^ i ( t − 1 ) {y}_{i},\widehat{y}_{i}^{(t-1)} yi,y i(t−1) 有关的损失函数,这个损失函数是可以根据需要自己定义的
2、 y ^ i ( t − 1 ) \widehat{y}_{i}^{(t-1)} y i(t−1) 表示”前t-1棵决策树“对样本i的预测值(将前t-1棵决策树中的每棵决策树的预测值相加所得); y i {y}_{i} yi 表示样本i的实际值
3、 f t ( x i ) f_{t}(x_{i}) ft(xi) 表示”第t棵决策树“对样本i 的预测值
4、 Ω ( f t ) \Omega(f_{t}) Ω(ft) 表示第t棵树的模型复杂度
所以,我们有结论如下图:总共k棵树对样本i的预测值=前k-1棵预测树的预测值+第k棵树的预测值
1、将刚刚得到的: y ^ i ( k ) = y ^ i ( k − 1 ) + f k ( x i ) \widehat{y}_{i}^{(k)}=\widehat{y}_{i}^{(k-1)}+{f}_{k}(x_{i}) y i(k)=y i(k−1)+fk(xi) 替换进目标函数。过程如下图
2、紧接着第一步的结果,我们有以下目标——怎么样才能使目标函数最小(如下图)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E8rsrcaA-1662714938255)(https://typora-nigel.oss-cn-nanjing.aliyuncs.com/img/未命名图片.png)]
3、为了解决这个问题,我们对目标函数进行化简。根据数学知识,我们可以使用“泰勒展开”对一个函数进行化简。具体过程如下图
大致的思路:1、使用泰勒展开;2、将常数项忽略(因为我们的目标是找最小值);3、转换一些符号,使式子更简洁
注释
Ω ( f k ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega(f_{k})=\gamma T + \frac{1}{2} \lambda\sum_{j=1}^T w_{j}^2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。