我最近在我的数据集中遇到了“奇怪”的观察。在使用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。
谢谢!
您是否尝试过添加和调整其他参数并使用网格搜索来找到最佳组合?为了防止过度拟合,我建议添加:
由于您使用的是XGBRegressor,请尝试修改目标函数。我还可以建议在构建树时监视验证和培训损失。