xgboost多分类原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xgboost多分类原理相关的知识,希望对你有一定的参考价值。

参考技术A 假设有M个样本,m个特征,N个类别,即:

其中

令 表示第 个样本在第 类上的真实得分值,则有:

令 表示预测的第 类样本在第 类上的得分值。
则多分类的损失函数定义如下:

其中 是交叉熵损失函数, 是惩罚项。

现假设前 棵树已经生成,为了表述方便,给出如下的几个符号定义:

由此定义如下的损失函数:

对于 这个公式,我们给出一个简单的例子来验证。现在假设有树的最高深度是1,限定boost为2,我们打印样本在每个boost上的得分(即落在哪个叶子节点上)
"""
0:[edu4<159.587] yes=1,no=2,missing=1
1:leaf=-0.0608645
2:leaf=0.117652
booster[1]:
0:[edu1<378.454] yes=1,no=2,missing=1
1:leaf=-0.0617213
2:leaf=0.136535
booster[2]:
0:[edu2<166.643] yes=1,no=2,missing=1
1:leaf=-0.0428214
2:leaf=0.14372
booster[3]:
0:[edu3<99.8889] yes=1,no=2,missing=1
1:leaf=0.00749163
2:leaf=0.181717
booster[4]:
0:[edu4<157.801] yes=1,no=2,missing=1
1:leaf=-0.0594841
2:leaf=0.102977
booster[5]:
0:[edu1<363.302] yes=1,no=2,missing=1
1:leaf=-0.0603631
2:leaf=0.116588
booster[6]:
0:[edu2<160.402] yes=1,no=2,missing=1
1:leaf=-0.0428952
2:leaf=0.117361
booster[7]:
0:[edu3<99.3995] yes=1,no=2,missing=1
1:leaf=0.000404452
2:leaf=0.14999
'''

可见每类上的的得分值只与其同类别的的得分值有关系。

将损失函数在 处泰勒展开(注意此处是向量函数的泰勒展开,第一次理解该问题的时候以后是标量的,然后就一直推导错误)

为了后续求解方便,假设惩罚项叶子节点的值的平方和。假设第 个boost的n颗树(对应为第n+1个类别上的得分值)有 个叶子节点,第 个叶子节点上的样本结合表示为:

即第 个样本落在第 个boost的第 类的树上的第 个叶子节点上。故惩罚项定义为:

则损失函数二级泰勒近似后有:

显然损失函数是关于 的二次的,由凸优化的理论知,最优点在一阶导数为零处取得,因此有:

因此只要求出 和 即可。
重写损失函数如下:

若记 为 个boost后第 个样本在第 类上的概率值, 则:

假设 ,即有 。上述一阶二阶导即可简化为:

对比源码中的逻辑

下一篇分享该部分的源码解读

以上是关于xgboost多分类原理的主要内容,如果未能解决你的问题,请参考以下文章

使用XGBoost实现多分类预测的实践

XGBoost文本多分类记录

XGBoost文本分类,多分类二分类10-Fold(K-Fold)

XGBoost 中多类分类的损失函数是啥?

xgboost原理,怎么防止过拟合。随机森林,GBDT,Xgoost的区别,bagging和boosting

xgboost原理与实战