2013-03-22 13 views
9

, clf.fit (X, Y) çalıştırdıktan sonra destek vektörlerinizi alırsınız. Svm.SVC nesnesini başlatırken bu destek vektörlerini doğrudan (paramter olarak geçerek) yükleyebilir miyim? Bu, her seferinde fit() yöntemini çalıştırmaya gerek olmadığı anlamına gelirscikit SVM'yi öğrenin, destek vektörlerini nasıl kaydeder/yüklersiniz? Python scikit svm kullanarak

+0

Olası yinelenen http://stackoverflow.com/questions/11440970/how-can-i-save-a-libsvm-python-object-instance – Pedrom

cevap

17

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

1.2.4 Model kalıcılık O kullanarak scikit bir model kaydetmek mümkündür Python yerleşik kalıcılık modeli, yani turşu. scikit spesifik durumda

>>> 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 

, büyük veriler üzerinde daha verimlidir turşu joblib en değiştirme, kullanımı daha ilginç olabilir, ama can sadece turşu bir dizeye diske değil:

Eğer eğitimli modeli kaydederken
>>> from sklearn.externals import joblib 
>>> joblib.dump(clf, ’filename.pkl’) 
+1

Bağlantı bozuk. Bunun yerine şunu kullanın: http://scikit-learn.org/stable/modules/model_persistence.html – Tommz

+0

Turşu ile kendinizi belirli bir scikit versiyonuna bağladığınıza göre, bu modellerin uzun süreli saklanması için iyi bir çözüm değildir. – Adversus

3

Daha sonra kullanmak için modeli kaydedebilirsiniz. Daha önce taktığım ve kaydettiğim bir model olduğunda modeli kullanmak için aşağıdaki kodu yazdım. scikit kılavuzunda itibaren

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

, bu birden fazla oluşturabilir dosya. ama yine de "dataset_name.pkl" adıyla adlandırıyorsunuz. Yukarıdaki değişken tahmincisi svm_linear_estimator olmalıdır. –

+1

Sadece fark ettim ki os.path.exists(), try catch kullanmanın daha akıllı olduğunu :) –

İlgili konular