如何在xgboost Booster中使用RFE?

8
我目前正在使用xgb.train(...),它返回一个booster,但我想使用RFE来选择最好的100个特征。由于它不是sklearn估计器,因此返回的booster不能用于RFE。XGBClassifier是xgboost库的sklearn API,但我无法获得与xgb.train(...)方法相同的结果(roc-auc差10%)。我尝试过sklearn boosters,但它们也无法获得类似的结果。我还尝试将xgb.train(...)方法包装在一个类中以添加sklearn估计器方法,但需要更改的内容太多了。有没有办法将xgb.train(...)与sklearn中的RFE一起使用?

2
XGBoost已经有了一个sklearn包装器。这对你有用吗?https://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.sklearn - hume
1个回答

4
针对这种问题,我创建了 shap-hypetune:一款Python软件包,用于梯度提升模型的同时超参数调整和特征选取。

在您的情况下,这使您可以以非常简单直观的方式使用 XGBClassifier 进行RFE

from shaphypetune import BoostRFE

model = BoostRFE(XGBClassifier(), min_features_to_select=1, step=1)
model.fit(X_train, y_train, eval_set=[(X_valid, y_valid)], early_stopping_rounds=6, verbose=0)

pred = model.predict(X_test)

如您所见,您可以使用标准 XGB API 中提供的所有拟合选项,例如early_stopping_rounds或自定义指标来自定义训练过程。

您还可以使用shap-hypetune来计算参数调整(还可以与特征选择同时进行)或使用SHAP功能重要性计算RFEBoruta的特征选择。 完整示例在此处可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接