2013-03-22 3 views
9

mit Python scikit svm, nach dem Ausführen von clf.fit (X, Y), erhalten Sie Ihre Support-Vektoren. konnte ich diese Unterstützungsvektoren direkt laden (sie als Parameter übergeben), wenn sie ein SVM.SVC Objekt instanziieren? was bedeutet, dass ich nicht jedes Mal die Methode fit() ausführen muss, um die Prädikation auszuführenscikit lernen SVM, wie Support Vektoren zu speichern/laden?

+0

Mögliche doppelte http://stackoverflow.com/questions/11440970/how-can-i-save-a-libsvm-python-object-instance – Pedrom

Antwort

17

Vom scikit Handbuch: http://scikit-learn.org/stable/modules/model_persistence.html

1.2.4 Modell Persistenz Es ist möglich, ein Modell in den scikit mithilfe von Python eingebaute in Persistenz-Modell zu speichern, nämlich Gurke.

>>> from sklearn import svm 
>>> from sklearn import datasets 
>>> clf = svm.SVC() 
>>> iris = datasets.load_iris() 
>>> X, y = iris.data, iris.target 
>>> clf.fit(X, y) 
SVC(kernel=’rbf’, C=1.0, probability=False, degree=3, coef0=0.0, eps=0.001, 
cache_size=100.0, shrinking=True, gamma=0.00666666666667) 
>>> import pickle 
>>> s = pickle.dumps(clf) 
>>> clf2 = pickle.loads(s) 
>>> clf2.predict(X[0]) 
array([ 0.]) 
>>> y[0] 
0 

Im speziellen Fall des scikit kann es interessant sein, JOBLIB Nachfolger von Beize zu verwenden, die auf große Daten mehr effizient ist, kann aber nur Beize auf die Festplatte und nicht in einen String:

>>> from sklearn.externals import joblib 
>>> joblib.dump(clf, ’filename.pkl’) 
+1

Der Link ist kaputt. Verwenden Sie dies stattdessen: http://scikit-learn.org/stable/modules/model_persistence.html – Tommz

+0

Beachten Sie, dass Sie mit Gurke binden Sie sich an eine bestimmte Scikit-Version, es ist keine gute Lösung für die langfristige Speicherung von Modellen. – Adversus

3

Sie können das Modell speichern, um es später zu verwenden. Ich habe den unten stehenden Code geschrieben, um das Modell zu verwenden, wenn es einen gibt, den ich vorher angepasst und gespeichert habe.

from sklearn.externals import joblib 
svm_linear_estimator = svm.SVC(kernel='linear', probability=False, C=1) 
try: 
    estimator = joblib.load("/my_models/%s.pkl"%dataset_name) 
    print "using trained model" 
except: 
    print "building new model" 
    estimator.fit(data_train, class_train) 
    joblib.dump(estimator,"/my_models/%s.pkl"%dataset_name) 
+0

, wenn Sie das trainierte Modell speichern, kann es mehr als ein erstellen Datei. aber Sie nennen es immer noch mit dem Namen "Dataset_name.pkl". Und der obige variable Schätzer hätte svm_linear_estimator sein sollen. –

+1

Ich habe gerade festgestellt, dass os.path.exists() klüger ist als mit try catch :) –

Verwandte Themen