如何在sklearn make_column_tranformer中使用LabelEncoder?

时间:2020-09-14 22:43:40

标签: python scikit-learn

如何在sklearn管道中使用LabelEncoder?

注意 以下代码适用于“ OneHotEncoder”,但不适用于“ LabelEncoder”,在这种情况下如何使用LabelEncoder?

MWE

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)

2 个答案:

答案 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. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
  2. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

答案 1 :(得分:0)

LabelEncoder 专门用于编码目标变量 - y。这就是为什么您不能像使用 OneHotEncoder 那样使用它同时转换多个列的原因。

Sklearn 为这种情况提供了 OrdinalEncoder。编码特征时可以一次编码多列。