Как получить выбранные функции в GridSearchCV в sklearn в python - PullRequest
3 голосов
/ 12 апреля 2019

Я использую 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 featuresи selected 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 Ответ

2 голосов
/ 12 апреля 2019

Объект rfecv, который вы передали GridSearchCV, им не подходит.Сначала он клонируется, а затем эти клоны подгоняются к данным и оцениваются для всех различных комбинаций гиперпараметров.

Таким образом, чтобы получить доступ к лучшим функциям, вам потребуется доступ к атрибуту best_estimator_ GridSearchCV: -

CV_rfc.fit(x_train, y_train)
print("Finished feature selection and parameter tuning")

print("Optimal number of features : %d" % rfecv.n_features_)
features=list(X.columns[CV_rfc.best_estimator_.support_])
print(features)
...