dzi*_*iou 6 python scikit-learn
我已经定义了用于拟合一个分类特征“性别”的数据:
data = pd.DataFrame({
'age': [25,19, 17],
'sex': ['female', 'male', 'female'],
'won_lottery': [False, True, False]
})
X = data[['age', 'sex']]
y = data['won_lottery']
Run Code Online (Sandbox Code Playgroud)
和用于转换分类特征的管道:
ohe = OneHotEncoder(handle_unknown='ignore')
cat_transformers = Pipeline([
('onehot', ohe)
])
Run Code Online (Sandbox Code Playgroud)
cat_transformers直接拟合数据时
cat_transformers.fit(X[['sex']], y)
print(ohe.get_feature_names())
Run Code Online (Sandbox Code Playgroud)
我能够获得OneHotEncoder实例创建的输出特征的名称:
['x0_female' 'x0_male']
Run Code Online (Sandbox Code Playgroud)
但是,如果我封装cat_transformers成ColumnTransformer:
preprocessor = ColumnTransformer(
transformers=[
('cat', cat_transformers, ['sex'])
]
)
preprocessor.fit(X, y)
print(ohe.get_feature_names())
Run Code Online (Sandbox Code Playgroud)
它失败了
sklearn.exceptions.NotFittedError: This OneHotEncoder instance is not fitted yet.
Call 'fit' with appropriate arguments before using this method.
Run Code Online (Sandbox Code Playgroud)
我希望,在调用fit()上的ColumnTransformer原因,呼吁fit()其所有变压器。
为什么它不能这样工作?
好的,我现在明白了。我正在安装一个实例OneHotEncoder并检查另一个实例的功能:
print(id(ohe))
print(id(preprocessor.named_transformers_['cat'].named_steps['onehot']))
2757198591872
2755226729104
Run Code Online (Sandbox Code Playgroud)
它看起来像是ColumnTranformer在安装之前克隆了它的变压器。
| 归档时间: |
|
| 查看次数: |
1600 次 |
| 最近记录: |