我目前使用的是xgb.train(...),它返回一个助推器,但我想使用RFE来选择最佳的100个特性。返回的助推器不能在RFE中使用,因为它不是sklearn估计器。XGBClassifier是xgboost库中的sklearn api,然而,我无法获得与xgb.train(...)方法相同的结果(roc-auc方法差10%)。我已经尝试过sklearn的助推器,但他们也不能得到类似的结果。我还尝试将xgb.train(...)方法包装在一个类中,以添加sklearn估计器方法,但要更改的方法太多了。有没有什么方法可以把xgb.train(...)和sklearn的RFE一起使用呢?
发布于 2021-05-20 16:08:24
针对这类问题,我创建了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中提供的所有拟合选项(如early_stopping_rounds或自定义指标)来定制训练过程。
还可以使用shap-hypetune来计算参数调整(也可以与特征选择同时进行),或者使用RFE或Boruta使用SHAP feature importance来计算特征选择。完整示例可用here
https://stackoverflow.com/questions/66308956
复制相似问题