如何在sklearn管道中使用LabelEncoder?
注意 以下代码适用于“ OneHotEncoder”,但不适用于“ LabelEncoder”,在这种情况下如何使用LabelEncoder?
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import make_column_transformer
import sklearn
print(sklearn.__version__) # 0.22.2.post1
df = sns.load_dataset('titanic').head()
le = OneHotEncoder() # this success
# le = LabelEncoder() # this fails
ct = make_column_transformer(
(le, ['sex','adult_male','alone']),
remainder='drop')
ct.fit_transform(df)
答案 0 :(得分:1)
在文档中,OneHotEncoder
可以获取一个数据框并将类别列转换为您看到的向量。 LabelEncoder
接受一个Series(您的y /因变量)并生成新标签。
OnHotEncoder的用法:fit_transform(X,[y])
LabelEncoder的用法:fit_transform(y)
这就是为什么它会告诉您:“ fit_transform() takes 2 positional arguments but 3 were given
”
如果您真的想使用它,只需直接在y上调用LabelEncoder
fit_transform
。这是一个类似的问题:How to use sklearn Column Transformer?
以下是文档:
答案 1 :(得分:0)
LabelEncoder
专门用于编码目标变量 - y
。这就是为什么您不能像使用 OneHotEncoder
那样使用它同时转换多个列的原因。
Sklearn 为这种情况提供了 OrdinalEncoder
。编码特征时可以一次编码多列。