了解 XG Boost 训练(多类分类)

数据挖掘 Python xgboost 正则化
2021-09-26 00:45:49

我一直在使用 XG boost 进行分类(多类分类:6 类),我用它5 fold CV来训练和验证我的模型。

请参考我在模型中使用的参数。

 params    = {"objective": 'multi:softprob', "eta": 0.1, "max_depth": 7,
               "min_child_weight": 4,"silent": 1, "subsample": 0.8,
               "colsample_bytree": 0.8, "num_class" : 6, "gamma" : 0, 
               "eval_metric" : 'merror', "seed": 0}

我绘制了每个折叠的训练和测试误差5 fold CV
在此处输入图像描述

问题:

  1. 我可以从训练和测试损失图中理解/解释什么?
  2. 训练错误减少到零,但测试错误会在一段时间内减少并变得空闲。
    • 我不确定模型是否过拟合?
    • 如何仅通过超参数调整来减少黑白训练和测试的错误,或者 这就是 XG Boost 模型的工作原理
2个回答

我可以从训练和测试损失图中理解/解释什么?

这检查了模型的质量。如果训练集和测试集的损失以相同的方式根据 epoch 的数量减少(即图应该相互重叠),则意味着该模型是好的。否则,我们就有问题了。在您的图表中快速分离(从 x 值超过 10 或 20)。在这种情况下,我们可以说这是过度拟合

我不确定模型是否过拟合?

这是典型的过拟合

如何仅通过超参数调整来减少黑白训练和测试的错误,或者这就是 XG Boost 模型的工作原理?

  • 更多数据。
  • 特征选择。
  • 交叉验证。
  • 广泛的超参数可供探索。
  • 随机搜索。

假设您的 x 轴是 nrounds(或 ntrees) 参数,

  1. XGB 是许多树相互叠加的集合。您的 XAxis 指示已使用了多少棵树。考虑 x = 100 和 x = 200 处的 2 个点,

当你有 100 棵树时,train 和 test 的损失接近 0.15 和 0.26,但是在这个 train 之上再建造 100 棵树,损失减少到 0.08,test 下降到 0.24。

  1. 这绝对是过度拟合,事实上看起来任何超过 200 棵树的生长都是完全浪费的。但是您将不得不尝试调整以下参数以添加正则化,以进一步减少差距 b/w 训练测试损失

    • num_round- 这是树参数的数量,只有在您看到验证损失有所改善时才会种植更多树。如果验证损失的改进值得拥有更多的树。我通常会首先保持这个大,只是为了看看损失是如何下降的,然后选择 num_round 超过它需要更多的树才能使验证损失显着下降

    • max_depth- 减少这个,记住 XGB 是弱树的集合。你的个体树一定很浅,所以我通常调整这个参数 b/w 3-6。这是树的最大长度。这是我要调整的第一个参数。

    • lambda-alpha增加这些参数。这些添加了 L1 和 L2 正则化。它可以取任何正值,并且您将其增加得越多,过度拟合的可能性就越小。

    • gammamin_child_weight- https://medium.com/data-design/xgboost-hi-im-gamma-what-c​​an-i-do-for-you-and-the-tuning-of-regularization-a42ea17e6ab6在这里解释得很好。

    • eta不要忘记这一点。您可以将其与num_rounds. 减少将导致您的模型学习缓慢num_rounds通常这是使用网格搜索/贝叶斯优化来调整以获得最佳结果。

所有参数: https ://xgboost.readthedocs.io/en/latest/parameter.html#