XGBoost

作者: Diamond1995 | 来源:发表于2019-04-10 10:21 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/zjbgiqtx.html