如果我在 XGB 模型中具有显性特征,我该怎么办?
What should I do in case I have dominant feature in XGB model?
我最近在我的数据集中遇到了 "strange" 观察。在使用 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 变为 "dominant" 具有非常高的增益 ~ 10000,而特征 F2 是下一个增益值 ~ 10000。
- 是否有任何技术可以通过在 F1 上应用某些转换来增强其他功能并提高准确性(或 F1 分数)?
- 有什么方法可以均衡特征增益并改进模型吗?
- 我是否应该尝试 "collect" 具有与 F1 相当的增益的更多功能?
谢谢!
您是否尝试过添加和调整其他参数并使用网格搜索来找到最佳组合?为了防止过度拟合,我建议添加:
- colsample_bytree:构建每棵树时列的子样本比例
- subsample:训练实例的子样本比例
- min_child_weight:防止学习关系对特定样本高度特定
由于您使用的是 XGBRegressor,请尝试修改 objective 函数。我还可以建议在构建树时监控验证和训练损失。
我最近在我的数据集中遇到了 "strange" 观察。在使用 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 变为 "dominant" 具有非常高的增益 ~ 10000,而特征 F2 是下一个增益值 ~ 10000。
- 是否有任何技术可以通过在 F1 上应用某些转换来增强其他功能并提高准确性(或 F1 分数)?
- 有什么方法可以均衡特征增益并改进模型吗?
- 我是否应该尝试 "collect" 具有与 F1 相当的增益的更多功能?
谢谢!
您是否尝试过添加和调整其他参数并使用网格搜索来找到最佳组合?为了防止过度拟合,我建议添加:
- colsample_bytree:构建每棵树时列的子样本比例
- subsample:训练实例的子样本比例
- min_child_weight:防止学习关系对特定样本高度特定
由于您使用的是 XGBRegressor,请尝试修改 objective 函数。我还可以建议在构建树时监控验证和训练损失。