Python 在sklearn管道中访问属性
我在访问sklearn管道中中间步骤的属性时遇到问题。这是我的密码:Python 在sklearn管道中访问属性,python,scikit-learn,sklearn-pandas,Python,Scikit Learn,Sklearn Pandas,我在访问sklearn管道中中间步骤的属性时遇到问题。这是我的密码: from sklearn.pipeline import make_pipeline, make_union from sklearn.compose import make_column_transformer from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, PowerTransformer,
from sklearn.pipeline import make_pipeline, make_union
from sklearn.compose import make_column_transformer
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, PowerTransformer, OneHotEncoder
categorical_pipeline = make_pipeline(
SimpleImputer(strategy='constant', fill_value='None'),
OneHotEncoder(sparse=False))
ratings_pipeline = make_pipeline(
RatingEncoder(),
StandardScaler(),
PowerTransformer(method='yeo-johnson'))
numeric_pipeline = make_pipeline(
SimpleImputer(strategy='constant', fill_value=0),
StandardScaler(),
PowerTransformer(method='yeo-johnson'))
preprocess = make_pipeline(
make_union(
# Select all categorical features and impute NA values into a unique category
make_column_transformer(
(categorical_pipeline, select_categorical_features),
remainder='drop'
),
# Select all rating-encoded features and convert them to numerical, apply Scaling+PowerTransform
make_column_transformer(
(ratings_pipeline, select_rated_features),
remainder='drop'
),
# Select all numeric features and impute, Scale+PowerTransform
make_column_transformer(
(numeric_pipeline, select_numeric_features),
remainder='drop'
),
)
)
我知道如何访问管道的中间步骤。在这里,我使用以下行访问数值_管道的PowerTransformer():
preprocess[0].transformer_list[2][1].transformers[0][1][2]
返回
PowerTransformer(copy=True, method='yeo-johnson', standardize=True)
这让我相信我已经正确地进入了这一步。但是,我想从这个PowerTransformer中提取.lambdas_uu属性,但是当我这样做时,我得到以下结果:
AttributeError: 'PowerTransformer' object has no attribute 'lambdas_'
我做错了什么?我正确地在管道上运行了fit(),并且正确地访问了PowerTransform()步骤,那么为什么我会得到AttributeError?好的,我自己解决了这个问题
preprocess[0].transformer_list[2][1].transformers[0][1][2].lambdas_
这是不正确的。具体而言,transformer\u list
和transformers
返回预安装变压器,而不是后安装变压器。以下代码起作用:
preprocess.steps[0][1].transformer_list[2][1].transformers_[0][1][2].lambdas_
请注意,您可以使用属性
named_steps['xxx']
(对于管道)和named_transformers['xxx']
(对于ColumnTransformer)。