Unpickling Ihr classifier
Objekt wird es im gleichen Zustand neu zu erstellen, dass es war, als Sie es gebeizt, so können Sie es mit frischen Daten aus dem Datensatz zu aktualisieren fortfahren. Und am Ende des Programmlaufs stechen Sie wieder in den Ordner classifier
und speichern ihn erneut in einer Datei. Es ist eine gute Idee, nicht die gleiche Datei zu überschreiben, sondern eine Sicherungskopie (oder besser noch eine Reihe von Sicherungskopien) zu behalten, falls Sie etwas vermasseln. Auf diese Weise können Sie leicht zu einem bekannten guten Zustand Ihrer classifier
zurückkehren.
Sie sollten mit dem Beizen experimentieren, indem Sie ein einfaches Programm und ein einfaches Objekt zum Beizen und Abtrennen verwenden, bis Sie völlig sicher sind, wie das alles funktioniert.
Hier ist eine grobe Skizze, wie die eingelegten classifier
Daten zu aktualisieren.
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)
Das erste Mal, wenn Sie dieses Programm ausführen wird es eine neue classifier
, trainieren sie mit den Daten in training_set
erstellen, Beize dann classifier
auf „naivebayes.pickle“. Jedes weitere Mal, wenn Sie dieses Programm ausführen, wird das alte classifier
geladen und weitere Trainingsdaten darauf angewendet.
BTW, wenn Sie diese 2 in Python tun sollten Sie viel schneller cPickle
Modul verwenden; Sie können das tun
ersetzen
import pickle
mit
import cPickle as pickle
Nichts geschieht automatisch. Ihr nächster Lauf des Programms muss die Datei öffnen, den Pickle darin in ein normales Python-Objekt laden, das Objekt modifizieren und dann wie oben wieder speichern. –
@KirkStrauser Das sage ich. Ich sollte meinen Code so lassen, nur richtig? Für den nächsten Lauf. Die schon erstellten naivebayes.pickle werden aktualisiert oder? – Arqam
Passt der Klassifizierer in den Arbeitsspeicher, ohne die restlichen Berechnungen zu beeinflussen? – sobek