如何查找和使用 XGBoost 的主要功能?

数据挖掘 机器学习 Python 随机森林 xgboost
2021-09-29 09:00:51

假设我有给定X_train、X_test、y_train、y_test的数据。由于这是一个分类问题,我想使用XGBoost

问题是有 300 多个功能。

我在网上发现有一些方法可以找到重要的功能。但由于我有很多功能,这会导致问题。

我当前的代码如下。我如何修改它来选择前 n (n = 20) 个特征并将它们用于训练模型。我尝试根据重要性对功能进行排序,但它不起作用。

   import xgboost as xgb
    gbm = xgb.XGBClassifier(max_depth=3, n_estimators=300, learning_rate=0.05).fit(X_train,y_train)
    predictions = gbm.predict(X_test)
2个回答

SKLearn 对此很友好。只需:

from sklearn.feature_selection import SelectFromModel
selection = SelectFromModel(gbm, threshold=0.03, prefit=True)
selected_dataset = selection.transform(X_test)

您将获得一个数据集,其中仅包含重要性超过阈值的特征,如 Numpy 数组。指出阈值是相对于总重要性的,所以它从 0 到 1。

如果您想可视化重要性,也许要手动选择您想要的功能,您可以这样做:

xgb.plot_importance(booster=gbm ); plt.show()

我想这就是你要找的。

results=pd.DataFrame()
results['columns']=x_data.columns
results['importances'] = clf.feature_importances_
results.sort_values(by='importances',ascending=False,inplace=True)

results[:20]