Sklearn 的 SimpleImputer 在管道中无法检索插补值
Sklearn's SimpleImputer can't retrieve imputation values when in pipeline
我试图在使用 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_
属性来打印出插补值?
我发现在使用 sklearn
管道时使用 'dot' 符号更容易,尤其是因为您可以自动完成以帮助您导航管道的 structure/attributes。它还有一个额外的好处(在我看来),即更具可读性。
您可以使用以下行访问 SimpleImputer
的 statistics_
属性:
clf.named_steps.preprocessor.named_transformers_.num.named_steps.simple_imputer.statistics_
我试图在使用 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_
属性来打印出插补值?
我发现在使用 sklearn
管道时使用 'dot' 符号更容易,尤其是因为您可以自动完成以帮助您导航管道的 structure/attributes。它还有一个额外的好处(在我看来),即更具可读性。
您可以使用以下行访问 SimpleImputer
的 statistics_
属性:
clf.named_steps.preprocessor.named_transformers_.num.named_steps.simple_imputer.statistics_