SimpleImputer от Sklearn не может получить значения вменения в конвейере - PullRequest
1 голос
/ 05 апреля 2020

Я пытаюсь распечатать все значения вменения после подбора с SimpleImputer. При использовании SimpleImputer отдельно я могу получить их из атрибута statistics_ экземпляра.

Это прекрасно работает:

s = SimpleImputer(strategy='mean')
s.fit(df[['feature_1', 'feature_2']])
print(s.statistics_)

Однако я не могу сделать это при использовании SimpleImputer в конвейере.

Это не работает:

numeric_transformer = Pipeline(steps=[
    ('simple_imputer', SimpleImputer(strategy='mean')),
    ('scaler', StandardScaler())])

categorical_features = ['feature_3']
categorical_transformer = Pipeline(steps=[
    ('simple_imputer', SimpleImputer(strategy='most_frequent')),
    ('one_hot', OneHotEncoder(handle_unknown='ignore'))])

preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, categorical_features)])

clf = Pipeline(steps=[('preprocessor', preprocessor),
                      ('classifier', RandomForestClassifier(n_estimators=100))])

clf.fit(df[numeric_features + categorical_features], df['target'])

print(clf.named_steps['preprocessor'].transformers[0][1].named_steps['simple_imputer'].statistics_)

Я получаю следующую ошибку:

AttributeError                            Traceback (most recent call last)
<ipython-input-523-7390eac0d9d6> in <module>
     19 clf.fit(df[numeric_features + categorical_features], df['target'])
     20 
---> 21 print(clf.named_steps['preprocessor'].transformers[0][1].named_steps['simple_imputer'].statistics_)

AttributeError: 'SimpleImputer' object has no attribute 'statistics_

Мне кажется, я получаю правильный экземпляр приспособленный SimpleImputer объект. Почему я не могу получить его атрибут statistics_ для вывода значений вменения?

1 Ответ

0 голосов
/ 05 апреля 2020

Мне проще использовать точечную нотацию при работе с sklearn конвейерами, не в последнюю очередь потому, что вы получаете автозаполнение, чтобы помочь вам перемещаться по структуре / атрибутам конвейера. Он также имеет дополнительный бонус (на мой взгляд), что делает его более читабельным.

Вы можете использовать следующую строку для доступа к атрибуту statistics_ SimpleImputer:

clf.named_steps.preprocessor.named_transformers_.num.named_steps.simple_imputer.statistics_
...