XGBoost全称 “Extreme Gradient Boosting“,被称为极端梯度提升法。它利用一连串的决策树,通过学习前一个决策树残差的方式,来不断逼近最终的预测结果,这里着重讲目标函数是如何构建的以及如何生成一棵新的树。
假设我们已经训练了棵树,那么其对于第个样本的预测结果为:
- 如果是回归问题,那么其最终的预测值就是
- 如果是分类问题,那么最终的结果就是其预测值为对应分类的概率()
假设我们一共有条样本数据,我们可以构建一个统一的目标函数:
- 其中是第个样本的真实值,如果是分类问题那就是1
- 是损失函数,对于回归问题我们可以使用MSE,对于分类问题可以使用Cross entropy
- 是对于每棵树的具体约束,防止单棵树过拟合,下面会具体讲
同样对于样本我们可以得到:
因此,我们可以得到:
这里我们可以假设前棵树都已经构建完成,正要构建第棵树,因此可以看为常数,因为目标函数是优化问题,往往跟常数项无关,因此我们可以不考虑,可以得到:
在这里我们直接对目标函数进行优化比较困难,因此可以选择用泰勒展开去逼近的方法,泰勒公式如下:
其实泰勒展开到二阶项的时候对应的值已经非常逼近原来的值,即:
在这里我们可以将看做是,看做是,那么,,因此:
同样对于优化问题,在前棵决策树已经构建完成的情况下,可以看做是常数,对整体求解没有影响,因此我们可以将其忽略,同时我们设,,我们可以得到:
我们设为第个样本在当前决策树的第个叶子节点上,为第个样本在当前决策树上的值为,同时对于同一棵决策树而言,落在同一个叶子节点上的值为一个集合,我们设落在某一个叶子节点上的样本点的集合为,同时我们设当前决策树一共有个叶子结点。
对于决策树问题,我们对其进行的限制无非是有以下三种:
- 树的深度
- 叶子节点的个数
- 叶子节点的值
同样对于二叉树而言叶子节点的个数又可以反映出树的深度,因此我们可以对每一颗决策树进行如下约束:
- 其中都是超参数,用于约束惩罚力度
因此可以得到:
我们的目的是使得该目标函数最小,我们设,
对于,由于和都可以看作是常数,因此就可以将其看做一个未知数为的二次函数,可以得到,当时,取得最小值
这里有个大假设是我们已经知道树的形状(叶子结点的个数是个定值)
- 因此我们可以利用去构建决策树,而非简单利用信息熵或者基尼系数,即每分裂一个节点列举所有可能的分裂方式,选择使得最小的方式去分裂
文章出处登录后可见!