决策树、GBDT、XGBoost和LightGBM之XGBoost

image.png


XGBoost在GBDT的基础上进行了改进,效果得到了明显的提升。一大不同是显式的引入了正则化项,用来约束决策树的复杂度。

1. 引理

1.1 目标函数

我们求解任何一个监督学习问题,都需要目标函数。
image.png
目标函数由两部分构成,损失函数和正则项。

损失函数:
用来衡量模型的拟合情况,构建更好的预测模型。

正则项: 代表树的复杂度,对于未知数据预测时,使得模型具有更小的方差,使得预测更加的稳定,同时避免过拟合。

常见的损失函数和正则项:
image.png
过拟合: 两张图即可简单说明
* 第一张:过拟合image.png
* 第二张:拟合效果好
* image.png

1.2 泰勒公式

泰勒公式,是我们众多优化算法推导的基础,将复杂函数优化问题,转变成多项式函数问题。

一阶泰勒公式:
image.png

二阶泰勒公式:
image.png

2. XGBoost模型原理:

2.1 树集成:

前面已经介绍了,集成学习,也就是多棵树的集成,针对XGBoost详细介绍,集成的原理。前面的介绍的集成树,多是使用的普通决策树。GBDT引入回归树(CART)(classification and regression trees)。在XGBoost中不仅使用CART同时包括分类线性回归。
我们同样从,原作者的例子开始。

一颗CART树:

同样是对是否有人喜欢电脑游戏进行分类:
image.png

我们把一个家庭的成员分成不同的叶子,并把他们分配到相应的叶子节点上。 CART 与 decision trees(决策树)有些许的不同,就是叶子只包含决策值。在 CART 中,每个叶子都有一个 real score(真实的分数).

多颗树:

使用多棵树预测,能显著提高我们的准确率,前面已经提到过。
image.png
一个样本的最终得分就是每棵树的预测分数加起来。我们暂且不管,为什么会有那个分数,我曾经纠结良久,一直往下看即可。

接下来可能会比较枯燥,大家准备好瓜子。


2.2 数学推导:

2.2.1 损失函数推导:

1.首先给出树集成模型的数学表达式,前面已经提到过,也就是加法模型:

image.png

2.然后利用我们刚才已经降到过的目标函数,建立该模型的目标函数:

image.png

3.模型公式转换:这部分比较难啃,先看推导式子

其实就是,第t颗树的第i个样本的推导公式,不断从前面建立递推公式。

4.修改目标函数:根据上式对目标函数进行具体化,并使用MSE(均方误差)作为误差函数

image.png
image.png

5.对误差函数进行二阶泰勒公式展开:对(4)的第一个式子,而不是第二个

image.png
image.png

6.最终优化的目标函数:

image.png

通过公式我们看出,目标函数变成了一个,依赖于gi和hi的函数,当然经过求偏导才可以求出。所以XGBoost支持自定义损失函数。

我们成功推导出,损失函数,然后是正则化,也就是模型复杂度的推导,以及如何求最优解。

2.2.2 求目标函数最优解:

1.首先改进一棵树的定义:

image.png
w: 是树叶上的分数向量,也就是我们开始人物头像下面的那个分数;
q: 是将每个数据点分配给叶子的函数;
T: 树叶的数量

2.XGBoost的复杂度定义:

image.png

为什么使用这个复杂度,答,前人的经验。

3.修改目标函数的树定义和复杂度:将(1)和(2)带入我们前面得到的公式

image.png

4.模型简化:对sigma求和进行调整,便于化简,主要看懂求和范围的转化

image.png

image.png是分配给第 j 个叶子的数据点的索引的集合,也就是本来是n个样本,我们将其拆开成T个含有(Ij个)样本的集合。

最后将小sigma求和,用一个变量表示:
image.png

5.模型最优解:终于看到曙光了,我们发现其实上式是关于Wj的二次函数,利用求根公式即可求出

image.png

image.png

鉴于公式复杂,给出一副简单图,说明每个变量到底是任何计算的。
image.png
而这一节第一幅图中的样本的分数,从上图就可以明白了。

到此就就结束了??So Naive

我们推导了,如何建立模型,以及如何求解最优预测分数和最小损失。但是我们并没有给出如何生成一棵树,或者说特征的选择,确定树的结构。决策树讲到了如何使用信息增益来生成一棵树。CART使用Gini系数,C4.5使用信息增益比,XGBoost使用什么。

2.2.3 学习树的结构:

我们尝试将一片叶子分成两片,那如何判断是否要进行划分,我们使用下面的公式:
image.png
公式可以分解为,(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

猜你喜欢

转载自blog.csdn.net/linxid/article/details/80147179