Библиотека ELI5 предоставляет функцию transform_feature_names
для извлечения названий функций для вывода преобразователя sklearn . В документации говорится, что функция работает "из коробки", когда в преобразователь входят вложенные конвейеры.
Я пытаюсь заставить функцию работать над упрощенной версией примера в ответ на SO 57528350 . Мой упрощенный пример не нуждается в Pipeline
, но в реальной жизни он понадобится мне для добавления шагов к categorical_transformer
, и я также хочу добавить трансформаторы к ColumnTransformer
.
import eli5
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler
X_train = pd.DataFrame({'age': [23, 12, 12, 18],
'gender': ['M', 'F', 'F', 'F'],
'income': ['high', 'low', 'low', 'medium'],
'y': [0, 1, 1, 1]})
categorical_features = ['gender', 'income']
categorical_transformer = Pipeline(
steps=[('onehot', OneHotEncoder(handle_unknown='ignore'))])
transformers=[('categorical', categorical_transformer, categorical_features)]
preprocessor = ColumnTransformer(transformers)
X_train_transformed = preprocessor.fit(X_train)
eli5.transform_feature_names(preprocessor, list(X_train.columns))
Умирает с сообщением
AttributeError: Преобразователь категории (тип Pipeline) не предоставляет get_feature_names.
Поскольку Pipeline
вложено в ColumnTransformer
Я понял из документации ELI5, что она будет обработана.
Нужно ли создавать модифицированную версию Pipeline
с помощью метода get_feature_names
или делать другие пользовательские модификации, чтобы использовать преимущества ELI5? function?
Я использую python 3.7.6, eli5 0.10.1, pandas 0.25.3 и sklearn 0.22.1.