我正在将 xgboost 模型(scala-spark)拟合到我的交易数据集中。我的训练集中有大约 200 万笔交易,这些交易非常不平衡,正/负比例<0.001。我现在在模型中有大约 300 个特征。
然后我取一个输出模型并计算每个特征
- 在多少棵树中存在一个特征
- 在多少次拆分中存在一个特征
然后我将特征从树最多的特征排序到树最少的特征。我得到了一些我不确定的结果。具有大多数树和拆分的列表顶部的功能基本上多次出现在每个 xgboost 树中。例如,在 100 轮的 xgboost 中,colsample_bytree=1.0我max_depth=6会看到一个特征A出现在 100 棵树和约 400 次分割中。功能B出现在 98 棵树和 350 次拆分等中……基本上,我所有的树似乎都基于不同配置中所有相同的顶级特征。
问题:
是否意味着:
- 很正常
- 这些特征是否过拟合了我的模型
- 我试图通过减少
colsample_bytreeor来强制模型采用其他特征colsample_bylevel,这有所帮助,但模型性能并没有显着提高。
还有其他建议吗?
更新观察(2019 年 2 月)
- 特征是连续的而不是分类的
- 当我根据所有特征的总增益(在特征上分割的所有节点的增益总和)对所有特征进行排序时,在所有树中多次出现的特征可能具有最高的总增益或相当低的总增益。这里没有规则。