如何在python中的sklearn中获取GridSearchCV中的选定功能

时间:2019-04-12 11:37:23

标签: python machine-learning scikit-learn data-mining gridsearchcv

我正在将recurive feature elimination with cross validation (rfecv)作为GridSearchCV的特征选择技术。

我的代码如下。

X = df[my_features_all]
y = df['gold_standard']

x_train, x_test, y_train, y_test = train_test_split(X, y, random_state=0)

k_fold = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)

clf = RandomForestClassifier(random_state = 42, class_weight="balanced")

rfecv = RFECV(estimator=clf, step=1, cv=k_fold, scoring='roc_auc')

param_grid = {'estimator__n_estimators': [200, 500],
    'estimator__max_features': ['auto', 'sqrt', 'log2'],
    'estimator__max_depth' : [3,4,5]
    }

CV_rfc = GridSearchCV(estimator=rfecv, param_grid=param_grid, cv= k_fold, scoring = 'roc_auc', verbose=10, n_jobs = 5)
CV_rfc.fit(x_train, y_train)
print("Finished feature selection and parameter tuning")

现在,我想从上面的代码中获得optimal number of featuresselected features

为此,我运行了以下代码。

#feature selection results
print("Optimal number of features : %d" % rfecv.n_features_)
features=list(X.columns[rfecv.support_])
print(features)

但是,出现以下错误: AttributeError: 'RFECV' object has no attribute 'n_features_'

还有其他获取这些详细信息的方法吗?

很高兴在需要时提供更多详细信息。

1 个答案:

答案 0 :(得分:2)

您传递给rfecv的对象GridSearchCV不适合它。首先将其克隆,然后对这些克隆进行数据拟合并评估超参数的所有不同组合。

因此,要访问最佳功能,您需要访问best_estimator_的{​​{1}}属性:-

GridSearchCV