Wie speichere ich einen trainierten Naive Bayes-Klassifikator auf der Festplatte und verwende ihn zur Vorhersage von Daten?
Ich habe das folgende Beispielprogramm von der scikit-learn-Website:
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print "Number of mislabeled points : %d" % (iris.target != y_pred).sum()
Sie können auch joblib.dump und joblib.load verwenden, die bei der Verarbeitung numerischer Arrays wesentlich effizienter sind als der Standard-Python-Pickler.
Joblib ist in scikit-learn enthalten:
Bearbeiten: In Python 3.8+ ist es jetzt möglich, Pickle zum effizienten Beizen von Objekten mit großen numerischen Arrays als Attribute zu verwenden, wenn Sie das Pickle-Protokoll 5 verwenden (dies ist nicht die Standardeinstellung).
quelle
fit
Methode anzuhalten und fortzusetzen , wenn Sie danach suchen. That being said,joblib.load
sollte nicht eine Ausnahme nach einer erfolgreichen erhöhen ,joblib.dump
wenn Sie es von einem Python mit der gleichen Version des Scikit-Learn - Bibliothek aufrufen.--pylab
Befehlszeilenflag noch die%pylab
Magie, da die implizite Überladung des Namespace bekanntermaßen den Beizprozess unterbricht. Verwenden Sie%matplotlib inline
stattdessen explizite Importe und die Magie.Was Sie suchen genannt Modell Persistenz in sklearn Worten , und es wird in dokumentiert Einführung und in Modell Persistenz Abschnitten.
Sie haben also Ihren Klassifikator initialisiert und lange mit trainiert
Danach haben Sie zwei Möglichkeiten:
1) Mit Pickle
2) Verwenden von Joblib
Noch einmal ist es hilfreich, die oben genannten Links zu lesen
quelle
In vielen Fällen, insbesondere bei der Textklassifizierung, reicht es nicht aus, nur den Klassifizierer zu speichern, sondern Sie müssen auch den Vektorisierer speichern, damit Sie Ihre Eingabe in Zukunft vektorisieren können.
zukünftiger Anwendungsfall:
Vor dem Dumping des Vektorisierers kann die Eigenschaft stop_words_ des Vektorisierers gelöscht werden durch:
um das Dumping effizienter zu gestalten. Auch wenn Ihre Klassifizierungsparameter spärlich sind (wie in den meisten Textklassifizierungsbeispielen), können Sie die Parameter von dicht in dünn konvertieren, was einen großen Unterschied in Bezug auf Speicherverbrauch, Laden und Dumping darstellt. Sparsifizieren Sie das Modell durch:
Dies funktioniert automatisch für SGDClassifier. Wenn Sie jedoch wissen, dass Ihr Modell spärlich ist (viele Nullen in clf.coef_), können Sie clf.coef_ manuell in eine csr scipy sparse-Matrix konvertieren, indem Sie:
und dann können Sie es effizienter speichern.
quelle
sklearn
Schätzer implementieren Methoden, die es Ihnen erleichtern, relevante trainierte Eigenschaften eines Schätzers zu speichern. Einige Schätzer implementieren__getstate__
Methoden selbst, sondern andere, wie dieGMM
gerade die Verwendung Basisimplementierung , die einfach speichert die inneren Wörterbuch - Objekte:Die empfohlene Methode zum Speichern Ihres Modells auf einer Disc ist die Verwendung des
pickle
Moduls:Sie sollten jedoch zusätzliche Daten speichern, damit Sie Ihr Modell in Zukunft neu trainieren können oder schwerwiegende Folgen haben (z. B. die Bindung an eine alte Version von sklearn) .
Aus der Dokumentation :
Dies gilt insbesondere für Ensemble-Schätzer , die sich auf das
tree.pyx
in Cython geschriebene Modul stützen (z. B.IsolationForest
), da dadurch eine Kopplung an die Implementierung hergestellt wird, die zwischen den Versionen von sklearn nicht garantiert stabil ist. In der Vergangenheit gab es rückwärts inkompatible Änderungen.Wenn Ihre Modelle sehr groß werden und das Laden zu einem Ärgernis wird, können Sie auch das effizientere verwenden
joblib
. Aus der Dokumentation:quelle
but can only pickle to the disk and not to a string
Sie können dies jedoch von joblib in StringIO einfügen. Das mache ich die ganze Zeit.sklearn.externals.joblib
ist veraltet , da0.21
und wird in entfernt werdenv0.23
:Daher müssen Sie installieren
joblib
:und schließlich schreiben Sie das Modell auf die Festplatte:
Um die abgelegte Datei zu lesen, müssen Sie lediglich Folgendes ausführen:
quelle