有没有方法保存 Labelencoder 的字典以进行推理

lar*_*529 2 python inference machine-learning data-science

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

Luk*_*ski 5

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

import joblib

joblib.dump(label_encoder, 'label_encoder.joblib')
label_encoder = joblib.load('label_encoder.joblib')
Run Code Online (Sandbox Code Playgroud)

既然您问的是 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))
Run Code Online (Sandbox Code Playgroud)

fit现在保存编码数据。我们现在可以使用以下命令反转编码:

fit.apply(lambda x: d[x.name].inverse_transform(x))
Run Code Online (Sandbox Code Playgroud)

要序列化您的字典,LabelEncoder请遵循与单个字典相同的路线:

joblib.dump(d, 'label_encoder_dict.joblib')
Run Code Online (Sandbox Code Playgroud)