XGBoost 最重要的特征多次出现在多棵树中

数据挖掘 xgboost 阿帕奇火花 斯卡拉
2022-02-22 00:02:35

我正在将 xgboost 模型(scala-spark)拟合到我的交易数据集中。我的训练集中有大约 200 万笔交易,这些交易非常不平衡,正/负比例<0.001。我现在在模型中有大约 300 个特征。

然后我取一个输出模型并计算每个特征

  • 在多少棵树中存在一个特征
  • 在多少次拆分中存在一个特征

然后我将特征从树最多的特征排序到树最少的特征。我得到了一些我不确定的结果。具有大多数树和拆分的列表顶部的功能基本上多次出现在每个 xgboost 树中。例如,在 100 轮的 xgboost 中,colsample_bytree=1.0max_depth=6会看到一个特征A出现在 100 棵树和约 400 次分割中。功能B出现在 98 棵树和 350 次拆分等中……基本上,我所有的树似乎都基于不同配置中所有相同的顶级特征。

问题:

是否意味着:

  • 很正常
  • 这些特征是否过拟合了我的模型
  • 我试图通过减少colsample_bytreeor来强制模型采用其他特征colsample_bylevel,这有所帮助,但模型性能并没有显着提高。

还有其他建议吗?

更新观察(2019 年 2 月)

  • 特征是连续的而不是分类的
  • 当我根据所有特征的总增益(在特征上分割的所有节点的增益总和)对所有特征进行排序时,在所有树中多次出现的特征可能具有最高的总增益或相当低的总增益。这里没有规则。
1个回答

对于您的问题:

  1. 可以是正常的。
  2. 特征本身不对过度拟合负责。它可以是来自它们的噪音,也可以只是没有因果关系的相关性。即特征在训练集中相关,但在测试集中不相关。过拟合与模型有关。
  3. 也许您仍然没有可以显着改进模型的功能。如此有限的信息很难说。您需要尝试一些特征选择实验。