python - 更新 Python Pickle 对象

标签 python pickle

我正在做一个机器学习项目,为此我正在使用 pickle Python的模块。

基本上,我正在解析一个巨大的数据集,这在一次执行中是不可能的,这就是为什么我需要保存分类器对象并在下一次执行中更新它。

所以我的问题是,当我使用新数据集再次运行程序时,已经创建的 pickle 对象是否会被修改(或更新)。如果不是,那么每次运行程序时如何更新相同的 pickle 对象。

save_classifier = open("naivebayes.pickle","wb")
pickle.dump(classifier,save_classifier)
save_classifier.close()

最佳答案

解开你的 classifier对象将以与 pickle 时相同的状态重新创建它,因此您可以继续使用数据集中的新数据对其进行更新。在程序运行结束时,你 pickle classifier再次将其保存到文件中。最好不要覆盖同一个文件,而是保留一个备份(或者更好的是,一系列备份),以防万一你搞砸了。这样,您可以轻松回到 classifier 的已知良好状态。 .

你应该尝试 pickle ,使用一个简单的程序和一个简单的对象来 pickle 和解酸,直到你对这一切的工作方式完全有信心。

这是如何更新 pickle classifier 的粗略草图数据。

import pickle
import os
from os.path import exists
# other imports required for nltk ...

picklename = "naivebayes.pickle"

# stuff to set up featuresets ...

featuresets = [(find_features(rev), category) for (rev, category) in documents]
numtrain = int(len(documents) * 90 / 100)
training_set = featuresets[:numtrain]
testing_set = featuresets[numtrain:]

# Load or create a classifier and apply training set to it
if exists(picklename):
    # Update existing classifier
    with open(picklename, "rb") as f:
        classifier = pickle.load(f)
    classifier.train(training_set)
else:
    # Create a brand new classifier    
    classifier = nltk.NaiveBayesClassifier.train(training_set)

# Create backup
if exists(picklename):
    backupname = picklename + '.bak'
    if exists(backupname):
        os.remove(backupname)
    os.rename(picklename, backupname)

# Save
with open(picklename, "wb") as f:
    pickle.dump(classifier, f)

第一次运行这个程序时,它会创建一个新的 classifier ,使用 training_set 中的数据对其进行训练,然后 pickle classifier到“naivebayes.pickle”。以后每次运行此程序时,它都会加载旧的 classifier。并对其应用更多的训练数据。

顺便说一句,如果您在 Python 2 中执行此操作,您应该使用更快的 cPickle模块;你可以通过替换来做到这一点
import pickle 


import cPickle as pickle

关于python - 更新 Python Pickle 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36796322/

相关文章:

python - 当 n 大于列表中元素的数量时,将列表旋转 n 次

python - 缺乏对多变量赋值Python的理解

Python 对象持久化

python - 如何在 Python 中为自动创建的类对象分配名称

Python multiprocessing.Pool 和参数 pickling

python - 在 Python 中,类名的自动完全限定是如何工作的? [与对象 pickle 相关]

python - Django:如何获取最相似的记录进行多过滤查询

python - 调试 pickle

python - 在 Python 中 pickle weakref

python - 通过 pickle/eval 和 zlib 进行序列化