#scikit-learn #pipeline #grid-search
Вопрос:
Я выполняю GridSearchCV над моей SelectFromModel в конвейере, например:
[...] from sklearn.feature_selection import SelectFromModel sfm = SelectFromModel(lr) ### MAGIC PART OF PIPELINE!!! pipe = Pipeline(steps=[('preprocessor', preprocessor), ('selector', sfm), ('regressor', lr)]) from sklearn.model_selection import GridSearchCV param_grid = { "selector__threshold": ['0.45*median', '0.5*median', '0.55*median', '1*median', '1.25*median'] } search = GridSearchCV(pipe, param_grid, n_jobs=-1, refit=True, verbose=1) print("Selected features") ???
Как я могу получить выбранные объекты из моей окончательной модели?
ПРАВКА: Предполагая, что порядок не изменится, я создам что-нибудь быстрое и грязное.
def get_selected_features(): all_features = [] # list, len=0 num_features # list, len=8 cat_features_encoded = search.best_estimator_.named_steps['preprocessor'].transformers_[1][1].named_steps['onehot'].get_feature_names(cat_features) cat_features_encoded.reshape(cat_features_encoded.size) # numpy.ndarray, shape=(331,) all_features.append(num_features) for x in cat_features_encoded: all_features.append(x) mask = search.best_estimator_.named_steps["selector"].get_support() # numpy.ndarray, shape=(339,) selected_features = [] for feature, active in zip(all_features, mask.reshape(mask.size)): if (active): selected_features.append(feature) return selected_features
Я надеюсь, что это правильно.