- Github主页:https://linxid.github.io/
- 知乎:https://zhuanlan.zhihu.com/p/35775368
- CSDN:https://blog.csdn.net/linxid/article/details/79973258
XGBoost在GBDT的基础上进行了改进,效果得到了明显的提升。一大不同是显式的引入了正则化项,用来约束决策树的复杂度。
1. 引理
1.1 目标函数
我们求解任何一个监督学习问题,都需要目标函数。
目标函数由两部分构成,损失函数和正则项。
损失函数:
用来衡量模型的拟合情况,构建更好的预测模型。
正则项: 代表树的复杂度,对于未知数据预测时,使得模型具有更小的方差,使得预测更加的稳定,同时避免过拟合。
常见的损失函数和正则项:
过拟合: 两张图即可简单说明
* 第一张:过拟合
* 第二张:拟合效果好
*
1.2 泰勒公式
泰勒公式,是我们众多优化算法推导的基础,将复杂函数优化问题,转变成多项式函数问题。
一阶泰勒公式:
二阶泰勒公式:
2. XGBoost模型原理:
2.1 树集成:
前面已经介绍了,集成学习,也就是多棵树的集成,针对XGBoost详细介绍,集成的原理。前面的介绍的集成树,多是使用的普通决策树。GBDT引入回归树(CART)(classification and regression trees)。在XGBoost中不仅使用CART同时包括分类线性回归。
我们同样从,原作者的例子开始。
一颗CART树:
同样是对是否有人喜欢电脑游戏进行分类:
我们把一个家庭的成员分成不同的叶子,并把他们分配到相应的叶子节点上。 CART 与 decision trees(决策树)有些许的不同,就是叶子只包含决策值。在 CART 中,每个叶子都有一个 real score(真实的分数).
多颗树:
使用多棵树预测,能显著提高我们的准确率,前面已经提到过。
一个样本的最终得分就是每棵树的预测分数加起来。我们暂且不管,为什么会有那个分数,我曾经纠结良久,一直往下看即可。
接下来可能会比较枯燥,大家准备好瓜子。
2.2 数学推导:
2.2.1 损失函数推导:
1.首先给出树集成模型的数学表达式,前面已经提到过,也就是加法模型:
2.然后利用我们刚才已经降到过的目标函数,建立该模型的目标函数:
3.模型公式转换:这部分比较难啃,先看推导式子
其实就是,第t颗树的第i个样本的推导公式,不断从前面建立递推公式。
4.修改目标函数:根据上式对目标函数进行具体化,并使用MSE(均方误差)作为误差函数
5.对误差函数进行二阶泰勒公式展开:对(4)的第一个式子,而不是第二个
6.最终优化的目标函数:
通过公式我们看出,目标函数变成了一个,依赖于gi和hi的函数,当然经过求偏导才可以求出。所以XGBoost支持自定义损失函数。
我们成功推导出,损失函数,然后是正则化,也就是模型复杂度的推导,以及如何求最优解。
2.2.2 求目标函数最优解:
1.首先改进一棵树的定义:
w: 是树叶上的分数向量,也就是我们开始人物头像下面的那个分数;
q: 是将每个数据点分配给叶子的函数;
T: 树叶的数量
2.XGBoost的复杂度定义:
为什么使用这个复杂度,答,前人的经验。
3.修改目标函数的树定义和复杂度:将(1)和(2)带入我们前面得到的公式
4.模型简化:对sigma求和进行调整,便于化简,主要看懂求和范围的转化
是分配给第 j 个叶子的数据点的索引的集合,也就是本来是n个样本,我们将其拆开成T个含有(Ij个)样本的集合。
最后将小sigma求和,用一个变量表示:
5.模型最优解:终于看到曙光了,我们发现其实上式是关于Wj的二次函数,利用求根公式即可求出
鉴于公式复杂,给出一副简单图,说明每个变量到底是任何计算的。
而这一节第一幅图中的样本的分数,从上图就可以明白了。
到此就就结束了??So Naive
我们推导了,如何建立模型,以及如何求解最优预测分数和最小损失。但是我们并没有给出如何生成一棵树,或者说特征的选择,确定树的结构。决策树讲到了如何使用信息增益来生成一棵树。CART使用Gini系数,C4.5使用信息增益比,XGBoost使用什么。
2.2.3 学习树的结构:
我们尝试将一片叶子分成两片,那如何判断是否要进行划分,我们使用下面的公式:
公式可以分解为,(1)新左叶上的得分; (2)新右叶上的得分; (3)原始叶子上的得分;(4) additional leaf(附加叶子)上的正则化。判断标准:如果增益小于正则化(gama),我们最好不要添加那个分支。
参考资料:
1.GBDT
https://blog.csdn.net/u012684933/article/details/51088609
https://www.zhihu.com/question/41354392
https://www.zybuluo.com/yxd/note/611571
2.XGBoost
官方文档:http://xgboost.readthedocs.io/en/latest/
中文文档:http://xgboost.apachecn.org/cn/latest/
https://blog.csdn.net/a819825294/article/details/51206410
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
https://blog.csdn.net/sb19931201/article/details/52557382
https://blog.csdn.net/github_38414650/article/details/76061893
http://xgboost.apachecn.org/cn/latest/model.html#id4