sklearn 将标签编码器序列化到磁盘以用于多个分类列
Posted
技术标签:
【中文标题】sklearn 将标签编码器序列化到磁盘以用于多个分类列【英文标题】:sklearn serialize label encoder to disk for multiple categorical columns 【发布时间】:2020-09-02 17:19:36 【问题描述】:我有一个模型,其中包含几个需要转换为数字格式的分类特征。我正在使用LabelEncoder 和OneHotEncoder 的组合来实现这一点。
一旦投入生产,我需要对新传入的数据应用相同的编码,然后才能使用模型。我使用pickle 将模型和编码器保存在磁盘上。这里的问题是LabelEncoder
只保留最后一组类(对于它编码的最后一个特征),因此它不能用于编码新数据的所有分类特征。为了解决这个问题,我在磁盘上为每个分类特征保存了一个不同的LabelEncoder
,但这对我来说似乎不能很好地扩展,尤其是当你有大量分类特征时。
这种情况的常见做法是什么?是否可以序列化并只保存一个编码器以用于生产中使用的所有分类特征?
【问题讨论】:
【参考方案1】:如果我能很好地理解你的问题。我想你需要在这里确认几件事。
-
DataFrame 的 Schema 或负载需要在 Production 中确认。
一旦模式得到确认,您就可以随时序列化这些编码器。例如,您可以将编码器存储为 Dict()。 cate_encoders = "feature_1": LabelEncoder(), "feature_2": LabelEncoder(), "feature_3": OneHotEncoder() 并序列化。
对于生产中的模型,您可以创建一个预处理器类,例如
然后创建模型(从磁盘或 s3 加载模型)并进行预测...
class MyPreprocessor:
def __init__(self):
self.cate_transform = None
self.num_transform = None
def load_transform(self, cat_trans, num_trans):
pass
def transform(self):
pass
【讨论】:
以上是关于sklearn 将标签编码器序列化到磁盘以用于多个分类列的主要内容,如果未能解决你的问题,请参考以下文章
sklearn.preprocessing.LabelEncoder_标准化标签,将标签值统一转换成range(标签值个数-1)范围内