XGBoost

1.XGBoost算法原理

XGBoost是GDBT算法的应用,GDBT是根据损失函数负梯度来进行拟合每一个弱学习器,然后运用加法模型,将每个弱学习器的结果以加权累加的形式输入到现有的模型中。

而XGBoost也是用的是CART树作为弱学习器,但是它不是根据gini或者均方误差来进行特征选择,而是重新定义了树的特征选择计算的损失函数,根据一阶函数和二阶函数的和最小来进行特征选择。并且在特征选择的时候添加了正则化,剪枝,约束了节点。

2.损失函数

2.1算法的模型:一个算法有其组成的模型,XGBoost就是用若干个决策树组成的。

但是目前树的参数未知,特征选择未知,节点输出结果未知,需要根据损失函数最小,来求解这些参数,而得到最优的树,进而组成最优的模型。


2.2损失函数:这里面添加了正则项,这样可以在寻找最佳模型参数的同时进行剪枝。

现在对训练误差和正则项的具体表达式表示都不知道。

2.3最小化损失函数,根据数据集来训练模型,得到最佳参数。

模型的参数就树的结构,但是一次同时训练n棵树得到其的参数不太现实,我们采用加法模型,一次训练一颗树,令每棵树都让损失函数最小即可。

例如:训练第t棵树,那么t-1棵树的损失函数是 确定的。


第i棵树的模型

第i棵树的损失函数:


用泰勒展开式展开损失函数:



泰勒展开式后的损失函数


损失函数的一阶导数,二阶导数。

把里面确定的值(常量去掉)


xgboost的正则项为:

为什么这样形式:简单,有效。

带入损失函数中得:


又 f(Xi)是决策树得结构,决策树得模型为:


用cart树模型替换掉,跟新损失函数:


最终得到:


对叶子节点上的得分求偏导,得各个叶子节点得最佳值wj,求得最佳损失函数为


这个表明可以用训练集的一阶,二阶导数的和来进行特征选择。



5.对缺失值处理

通常情况下,我们人为在处理缺失值的时候大多会选用中位数、均值或是二者的融合来对数值型特征进行填补,使用出现次数最多的类别来填补缺失的类别特征。

但是xgboost模型可以处理缺失值,或者说可以允许缺失值的存在。

:缺失值的处理将其看与稀疏矩阵的处理看作一样。在寻找split point的时候,不会对该特征为missing的样本进行遍历统计,只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找split point的时间开销。在逻辑实现上,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可。可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。

伪代码:

6.优缺点

优点:

1.可以并行,速度快,因为用到的是一阶,二阶导数。

2.在特征选择时就进行了正则化约束。

3.能够自动处理缺失值。


8.sklearn参数



你可能感兴趣的:(XGBoost)