作者:北漂123 | 来源:互联网 | 2023-02-12 08:24
我正在尝试对我的Pandas数据帧的分类变量进行一次编码,其中包括分类变量和连续变量.我意识到这可以通过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'是一个数据帧,并''目标'一系列)时,它会给出一个错误'无法将字符串转换为浮点数'.
lm.fit(features, targets)
谁可以帮助我?我非常渴望工作管道,包括数据的预处理...提前谢谢!
1> dukebody..:
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())])