Как сделать Onehotencoding в конвейере Sklearn
Я пытаюсь oneHotEncode категориальные переменные моего фрейма данных Pandas, который включает в себя как категориальные, так и непрерывные переменные. Я понимаю, что это легко сделать с пандами .функция get_dummies (), но мне нужно использовать конвейер, чтобы я мог создать PMML-файл позже.
Это код для создания картографа. Категориальные переменные, которые я хотел бы кодировать, хранятся в списке под названием "чайники".
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())])
когда я теперь пытаюсь соответствовать (с "функциями", являющимися фреймом данных, и "целями" серии), это дает ошибку "не удалось преобразовать строку в float".
lm.fit(features, targets)
кто-нибудь может мне помочь? Я отчаянно нуждаюсь в рабочих трубопроводах, включая предварительную обработку данных... Заранее спасибо!
1 ответов
OneHotEncoder
не поддерживает строковые функции, и с [(d, OneHotEncoder()) for d in dummies]
вы применяете его ко всем столбцам манекенов. Использовать LabelBinarizer
вместо:
mapper = DataFrameMapper(
[(d, LabelBinarizer()) for d in dummies]
)
альтернативой было бы использовать LabelEncoder
второй