Как сделать 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 второй