Как получить имена функций в другом конвейере в sklearn в python

Я использую следующий код (source), чтобы объединить несколько методов извлечения признаков.

from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest

iris = load_iris()

X, y = iris.data, iris.target

pca = PCA(n_components=2)
selection = SelectKBest(k=1)

# Build estimator from PCA and Univariate selection:
combined_features = FeatureUnion([("pca", pca), ("univ_select", selection)])

# Use combined features to transform dataset:
X_features = combined_features.fit(X, y).transform(X)
print("Combined space has", X_features.shape[1], "features")

svm = SVC(kernel="linear")

# Do grid search over k, n_components and C:
pipeline = Pipeline([("features", combined_features), ("svm", svm)])

param_grid = dict(features__pca__n_components=[1, 2, 3],
                  features__univ_select__k=[1, 2],
                  svm__C=[0.1, 1, 10])

grid_search = GridSearchCV(pipeline, param_grid=param_grid, cv=5, verbose=10)
grid_search.fit(X, y)
print(grid_search.best_estimator_)

Я хочу получить имена выбранных функций из приведенного выше кода.

Для этого я использовал grid_search.best_estimator_.support_. Однако это вернуло сообщение об ошибке:

AttributeError: 'Pipeline' object has no attribute 'support_'

Есть ли способ получить имена выбранных функций, как показано в приведенном выше коде, в sklearn в python?

Я рад предоставить более подробную информацию, если это необходимо.


person EmJ    schedule 14.04.2019    source источник
comment
Возможно, это дубликат следующего SO stackoverflow.com/questions/36829875/   -  person Ali Azam    schedule 14.04.2019


Ответы (1)


Вот мой подход, чтобы узнать окончательные функции, используемые best_estimator_

>>> features = grid_search.best_estimator_.named_steps['features']

# number of components chosen from pca
>>> pca=features.transformer_list[0][1]

>>> pca.n_components
3

# features chosen by selectKbest
>>> select_k_best=features.transformer_list[1][1]

>>> select_k_best.get_support()
array([False, False,  True, False])
person Venkatachalam    schedule 14.04.2019
comment
Большое спасибо. Пожалуйста, дайте мне знать, если вы знаете ответ на этот вопрос: -in-sklearn-in-pyt" title="почему я получаю разные значения с конвейером и без конвейера в sklearn в pyt"> stackoverflow.com/questions/55671530/ Большое спасибо :) - person EmJ; 14.04.2019