是否有保存Labelencoder的字典以进行推断的方法

时间:2019-05-15 23:24:48

标签: python machine-learning data-science inference

我正在尝试建立一个推理管道。它由两部分组成。使用往年的一些表格订单元数据进行每月ML模型训练,并使用当天取得的新订单进行每日推理预测。我想在模型中包括几个字符串分类列,我使用labelencoder将它们转换为整数。我想知道如何在数据预处理期间将每日推理数据集转换为相同的类别。是否应将labelencoder和映射的字典保存到推理数据集?谢谢。

1 个答案:

答案 0 :(得分:1)

通常,您会序列化LabelEncoder,例如like this。您也可以使用picklejoblib模块(我建议后者)。代码:

import joblib

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

由于您在询问字典,所以我想您可能是指将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')