Wie Speichere ich eine TfidfVectorizer für die zukünftige Verwendung in scikit-learn?
Ich habe eine TfidfVectorizer
dass vectorizes Sammlung von Artikeln, gefolgt von der Featureauswahl.
vectroizer = TfidfVectorizer()
X_train = vectroizer.fit_transform(corpus)
selector = SelectKBest(chi2, k = 5000 )
X_train_sel = selector.fit_transform(X_train, y_train)
Jetzt, ich möchten, speichern Sie diese und verwenden Sie es in andere Programme. Ich will nicht re-run der TfidfVectorizer()
und die feature-Selektor auf die Trainings-dataset. Wie mache ich das? Ich weiß, wie man ein Modell persistent mit joblib
aber ich Frage mich, ob dies ist dasselbe wie ein Modell persistent.
joblib
scheint zu arbeiten. Aber ich denke, ich muss dump der vectorizer und feature-Selektor unabhängig.- Wenn Sie eine funktionierende Lösung haben, posten Sie Ihre Vorgehensweise und einige code.
- scikit-learn.org/stable/modules/model_persistence.html hat einige Warnungen rund um Sicherheits-und version-management.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einfach die eingebaute Gurke lib:
und laden es mit:
Pickle serialisieren der Objekte auf der Festplatte und laden Sie Sie nochmals in Erinnerung, wenn Sie es brauchen
Gurke lib docs
pickle.PicklingError: Can't pickle <type 'instancemethod'>: it's not found as __builtin__.instancemethod
Wie funktioniert das? Ich bin stroring die TfIdfVectorizer-Objekt als gut."Ein Objekt persistent" bedeutet im Grunde, dass Sie gehen, um einen dump der binary code, gespeichert im Speicher, stellt das Objekt in eine Datei auf der Festplatte, so dass später in Ihrem Programm oder in andere Programme kann das Objekt neu geladen werden aus der Datei in der Festplatte in den Speicher.
Entweder scikit-learn enthalten
joblib
oder die stdlibpickle
undcPickle
würde die Arbeit machen.Ich Neige dazu, lieber
cPickle
denn es ist deutlich schneller. Mit ipython ist, %timeit Befehl:Wenn Sie nun speichern wollen mehrere Objekte in einer einzelnen Datei, können Sie ganz einfach erstellen Sie eine Datenstruktur zu speichern, dann einen dump der Struktur der Daten selbst. Dies funktioniert mit
tuple
,list
oderdict
.Aus dem Beispiel deiner Frage:
Später oder in einem anderen Programm, die folgenden Anweisungen zurück zu bringen die Datenstruktur in Ihrem Programm den Speicher:
%timeit dump_load_test(t, pickle) 433 µs ± 40.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
. Außerdem müssen Sie, um den Datei-öffnen-Modus zu'wb'
und'rb'
.Hier ist meine Antwort mit joblib:
Später kann ich laden und es bereit zu gehen: