【问题标题】:How to do Onehotencoding in Sklearn Pipeline如何在 Sklearn 管道中进行 Onehotencoding
【发布时间】:2017-07-01 10:48:03
【问题描述】:

我正在尝试对我的 Pandas 数据框的分类变量进行 oneHotEncode,其中包括分类变量和连续变量。我意识到这可以通过 pandas .get_dummies() 函数轻松完成,但我需要使用管道以便稍后生成 PMML 文件。

这是创建映射器的代码。我想编码的分类变量存储在一个名为“dummies”的列表中。

from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder

mapper = DataFrameMapper(
    [(d, LabelEncoder()) for d in dummies] +
    [(d, OneHotEncoder()) for d in dummies]
)

这是创建管道的代码,包括映射器和线性回归。

from sklearn2pmml import PMMLPipeline
from sklearn.linear_model import LinearRegression

lm = PMMLPipeline([("mapper", mapper),
                   ("regressor", LinearRegression())])

当我现在尝试适应时(“特征”是一个数据框,“目标”是一个系列),它会给出一个错误“无法将字符串转换为浮点数”。

lm.fit(features, targets)

谁能帮帮我?我迫切需要包括数据预处理在内的工作管道......提前致谢!

【问题讨论】:

    标签: python scikit-learn pipeline sklearn-pandas


    【解决方案1】:

    OneHotEncoder 不支持字符串功能,而[(d, OneHotEncoder()) for d in dummies] 您将其应用于所有虚拟列。请改用LabelBinarizer

    mapper = DataFrameMapper(
        [(d, LabelBinarizer()) for d in dummies]
    )
    

    另一种方法是使用LabelEncoder 和第二个OneHotEncoder 步骤。

    mapper = DataFrameMapper(
        [(d, LabelEncoder()) for d in dummies]
    )
    
    lm = PMMLPipeline([("mapper", mapper),
                       ("onehot", OneHotEncoder()),
                       ("regressor", LinearRegression())])
    

    【讨论】:

    • 非常感谢,labelbinarizer 对我有用。我确实认为我现在只保留了我 onehot 编码的分类特征。有没有办法同时包含原始的连续特征?
    • 是的,在DataFrameMapper 中列出它们,None 作为转换器。
    猜你喜欢
    • 2018-05-27
    • 2020-06-30
    • 2020-02-20
    • 1970-01-01
    • 2021-09-04
    • 2018-12-01
    • 2020-04-11
    • 2017-05-15
    • 2020-12-20
    相关资源
    最近更新 更多