如何在 Sklearn Pipeline 中进行 Onehotencoding
How to do Onehotencoding in Sklearn Pipeline
我正在尝试对 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())])
当我现在尝试拟合时('features' 是一个数据框,'targets' 是一个系列),它给出了一个错误 'could not convert string to float'。
lm.fit(features, targets)
谁能帮帮我?我迫切需要工作管道,包括数据预处理...提前致谢!
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())])
我正在尝试对 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())])
当我现在尝试拟合时('features' 是一个数据框,'targets' 是一个系列),它给出了一个错误 'could not convert string to float'。
lm.fit(features, targets)
谁能帮帮我?我迫切需要工作管道,包括数据预处理...提前致谢!
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())])