【问题标题】:What should I do in case I have dominant feature in XGB model?如果我在 XGB 模型中具有主导特征,我该怎么办?
【发布时间】:2020-04-14 19:21:49
【问题描述】:

我最近在我的数据集中遇到了一个“奇怪”的观察结果。在使用 20 个特征进行 XGB 建模后,我绘制了增益值最高的前 10 个特征。结果如下图:

F1         140027.061202
F2          11242.470370
F3           9957.161039
F4           9677.070632
F5           7103.275865
F6           4691.814929
F7           4030.730915
F8           2775.235616
F9           2384.573760
F10          2328.680871

如您所见,与所有其他功能相比,F1 的增益占主导地位(增益是 F2 的 12 倍)。我在测试集上验证了结果,模型没有过度拟合,并且给出了不错的结果(与我的品质因数相比):

F1-score: 0.739812237993 
Accuracy: 0.839632893701 
Precision: 0.63759578607
Recall: 0.881059718486

基于这些结果,是否可以得出 F1 特征足以构建模型的结论?

为了证明这一点,我使用相同的参数重新运行建模,但现在将 F1 作为独立功能。结果只是比以前稍差(并且没有过度拟合):

F1-score: 0.710906846703 
Accuracy: 0.819880412472 
Precision: 0.607953806173
Recall: 0.85583736242

我的 XGB 参数在这两种情况下都超级简单:

alg = XGBRegressor( 
    n_estimators=200,
    max_depth=5,
    objective='binary:logistic', 
    seed=27,
)

# Fit the algorithm on the data
metric = 'map'
alg.fit(X_train, y_train, eval_metric=metric)

在我排除功能 F1 并重新拟合模型后,我得到了类似的验证指标(稍微差一点),但在这种情况下,功能 F3 变得“占主导地位”,增益非常高 ~ 10000,而功能 F2 是下一个增益值 ~ 10000。

  1. 是否有任何技术可以通过在 F1 上应用某些转换来增强其他功能并提高准确性(或 F1 分数)?
  2. 有什么方法可以均衡特征增益并改进模型?
  3. 我是否应该尝试“收集”更多可以获得与 F1 相当的增益的功能?

谢谢!

【问题讨论】:

    标签: python data-science xgboost feature-selection information-gain


    【解决方案1】:

    您是否尝试过添加和调整其他参数并使用网格搜索来找到最佳组合?为了防止过度拟合,我建议添加:

    • colsample_bytree:构建每棵树时列的子样本比率
    • subsample:训练实例的子样本比例
    • min_child_weight:防止学习关系高度特定于特定样本

    由于您使用的是 XGBRegressor,请尝试修改目标函数。我还可以建议在构建树时监控验证和训练损失。

    Reference documentation

    【讨论】:

    • 谢谢你的回答:)!是的,我也尝试过调整这些参数,结果在指标和特征重要性方面基本保持不变。我没有尝试运行任何优化(网格搜索),因为我不确定这是否会有所帮助。另外,您是否建议该模型过度拟合?我检查训练和测试数据的指标结果,它们或多或少相同......我会定义的。尝试监控验证/训练损失并检查那里是否有可疑之处。
    猜你喜欢
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多