Как получить имена элементов из ELI5, когда в трансформатор встроен конвейер - PullRequest
1 голос
/ 31 марта 2020

Библиотека 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.

...