Есть ли способ сохранить данные Labelencoder для вывода - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь построить конвейер вывода. Он состоит из двух частей. Ежемесячное обучение модели ML с использованием некоторых табличных метаданных заказов в предыдущие годы и ежедневное прогнозирование вывода с использованием новых заказов, принятых в этот день. Есть несколько строковых категориальных столбцов, которые я хочу включить в свою модель, которые я использовал labelencoder для преобразования их в целые числа. Мне интересно, как я могу убедиться, что я преобразую ежедневный набор данных вывода в те же категории во время предварительной обработки данных. Должен ли я сохранить словарь labelencoder и отображение в мой набор данных вывода? Спасибо.

1 Ответ

1 голос
/ 16 мая 2019

Как правило, вы бы сериализовали свой LabelEncoder, например , например .Вы также можете использовать pickle или joblib модули (я бы посоветовал последнее).Код:

import joblib

joblib.dump(label_encoder, 'label_encoder.joblib')
label_encoder = joblib.load('label_encoder.joblib')

Поскольку вы спрашиваете о dict, я полагаю, вы могли бы сослаться на упаковку LabelEncoder в словарь, что я часто делаю с фреймами данных.Возьмите этот пример:

import pandas
from collections import defaultdict
from sklearn import preprocessing 

df = pandas.DataFrame({
    'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'], 
    'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'], 
    'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego', 
                 'New_York']
})

d = defaultdict(preprocessing.LabelEncoder)
fit = df.apply(lambda x: d[x.name].fit_transform(x))

fit теперь содержит закодированные данные.Теперь мы можем изменить кодировку с помощью:

fit.apply(lambda x: d[x.name].inverse_transform(x))

Чтобы сериализовать словарь LabelEncoder, вы должны следовать тем же путем, что и с одним:

joblib.dump(d, 'label_encoder_dict.joblib')
...