xgboost:前几轮啥都没学到

Posted

技术标签:

【中文标题】xgboost:前几轮啥都没学到【英文标题】:xgboost: first several round does not learn anythingxgboost:前几轮什么都没学到 【发布时间】:2020-04-06 09:23:07 【问题描述】:

当我训练 xgboost 并使用 AUC 作为衡量性能的指标时,我注意到前几轮的 AUC 分数始终为 0.5。基本上这意味着前几棵树没有学到任何东西:

Multiple eval metrics have been passed: 'eval-auc' will be used for early stopping.

Will train until eval-auc hasn't improved in 20 rounds.
[0] train-auc:0.5   eval-auc:0.5
[1] train-auc:0.5   eval-auc:0.5
[2] train-auc:0.5   eval-auc:0.5
[3] train-auc:0.5   eval-auc:0.5
[4] train-auc:0.5   eval-auc:0.5
[5] train-auc:0.5   eval-auc:0.5
[6] train-auc:0.5   eval-auc:0.5
[7] train-auc:0.5   eval-auc:0.5
[8] train-auc:0.5   eval-auc:0.5
[9] train-auc:0.5   eval-auc:0.5
[10]    train-auc:0.5   eval-auc:0.5
[11]    train-auc:0.5   eval-auc:0.5
[12]    train-auc:0.5   eval-auc:0.5
[13]    train-auc:0.5   eval-auc:0.5
[14]    train-auc:0.537714  eval-auc:0.51776
[15]    train-auc:0.541722  eval-auc:0.521087
[16]    train-auc:0.555587  eval-auc:0.527019
[17]    train-auc:0.669665  eval-auc:0.632106
[18]    train-auc:0.6996    eval-auc:0.651677
[19]    train-auc:0.721472  eval-auc:0.680481
[20]    train-auc:0.722052  eval-auc:0.684549
[21]    train-auc:0.736386  eval-auc:0.690942

如您所见,前 13 轮没有学到任何东西。

我使用的参数: 参数 = 'max_depth':6, 'eta':0.3, 'silent':1, 'objective':'binary:logistic'

使用 xgboost 0.8

有没有办法防止这种情况发生?

谢谢

【问题讨论】:

【参考方案1】:

前几轮 AUC 等于 0.5 并不意味着 XGBoost 没有学习。检查您的数据集是否平衡。如果不是,所有实例(target=1 和 target=0)都会尝试从默认 0.5 变为目标平均值,例如0.17(logloss 提高,学习正在进行),然后达到提高 logloss 提高 AUC 的区域。如果您想帮助算法到达该区域,请将参数base_score=0.5 的默认值更改为目标均值。 https://xgboost.readthedocs.io/en/latest/parameter.html

【讨论】:

以上是关于xgboost:前几轮啥都没学到的主要内容,如果未能解决你的问题,请参考以下文章

陈天奇,开课!!

04-09 XgBoost算法

R语言构建xgboost模型:使用GPU加速xgboost模型构建

XGBoost原理

xgboost需不需要特征挑选

R语言构建xgboost模型:使用xgboost构建泊松回归(poisson regression)模型