如何保存一个热编码器?

Posted

技术标签:

【中文标题】如何保存一个热编码器?【英文标题】:How to save one hot encoder? 【发布时间】:2020-01-30 19:08:50 【问题描述】:

我正在尝试从 keras 中保存一个热编码器,以便在不同的文本上再次使用它,但保持相同的编码。

这是我的代码:

df = pd.read_csv('dataset.csv ')
vocab_size = 200000
encoded_docs = [one_hot(d, vocab_size) for d in df.text]

如何保存此编码器并稍后再次使用?

我在研究中发现了this,但 one_hot() 似乎是一个函数而不是一个对象(对不起,如果这是完全错误的,我对 python 还很陌生)。

【问题讨论】:

酸洗不行吗? IE。 import pickle; with open("encoder", "wb") as f: pickle.dump(one_hot, f)。函数也是对象。 感谢您的回答,您的代码有效,我可以将其保存到文件中,但如何恢复和重新使用它? import pickle; with open("encoder", "rb") as f: one_hot = pickle.load(f) 再次感谢,但是当我执行encoder = pickle.load(f)encoded_docs =[encoder(d, vocab_size) for d in df.text] 之后,编码似乎有所不同,就好像我用这一行重新训练了编码器一样。 啊哈!这种假定的编码是作弊,它使用hash() 来生成准唯一编码。由于哈希种子随机化,数字总是不同的。使用PYTHONHASHSEED=0 python 启动Python,然后它应该可以工作(并且您不需要腌制该函数,只需导入它即可)。 【参考方案1】:

为了社区的利益,在本节中提及答案(尽管它出现在评论部分)。

要保存编码器,可以使用以下代码:

import pickle
with open("encoder", "wb") as f: 
    pickle.dump(one_hot, f)

然后加载保存的编码器,使用以下代码:

encoder = pickle.load(f) 
encoded_docs =[encoder(d, vocab_size) for d in df.text]

由于函数 from.keras.preprocessing.text import one_hot 使用 hash() 生成准唯一编码,我们需要使用 HashSeed 来重现我们的结果(即使在多次执行后也能得到相同的结果)。

在终端中运行以下代码,设置HashSeed

【讨论】:

【参考方案2】:

前面的答案很棒,我找到了另一个需要joblib的可用选项

from joblib import dump, load
dump(clf, 'filename.joblib') # save the model
clf = load('filename.joblib') # load and reuse the model

【讨论】:

以上是关于如何保存一个热编码器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在字符串数字上使用序数编码器或热编码器

独热编码(one-hot)是什么?什么数据类型需要进行独热编码?pandas如何进行独热编码(one-hot)?

如何获得一个句子的热编码? [复制]

如何在使用 sklearn 进行一次热编码后给出列名?

如何在使用 sklearn 进行一次热编码后给出列名?

如何在一个热编码数据帧中找到唯一组合?