2013-03-22 67 views
9

使用python scikit svm,運行clf.fit(X,Y)後,您將獲得支持向量。 可以在實例化svm.SVC對象時直接加載這些支持向量(將它們作爲參數傳遞)?這意味着我不需要每次運行fit()方法來進行預測scikit學習SVM,如何保存/加載支持向量?

+0

可能的複製http://stackoverflow.com/questions/11440970/how-can-i-save-a-libsvm-python-object-instance – Pedrom 2013-03-22 11:46:52

回答

17

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

1.2.4模型持久 有可能通過使用保存在scikit模型Python的內置的持久性模型,即鹹菜。

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

在scikit的特定情況下,它可能是更有趣的使用JOBLIB的替代泡菜,這是對大數據更 效率,但只能鹹菜到磁盤,而不是一個字符串:

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

鏈接已損壞。請改爲使用它:http://scikit-learn.org/stable/modules/model_persistence.html – Tommz 2015-05-22 18:08:59

+0

請注意,使用pickle可以將自己綁定到特定的scikit版本,但它不是長期存儲模型的好方案。 – Adversus 2016-04-14 08:08:35

3

您可以保存模型以便稍後使用。 我寫下面的代碼來使用模型,當存在一個我以前安裝和保存的模型時。

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

當您保存訓練的模型,它可以創建一個以上文件。但您仍然使用「dataset_name.pkl」名稱調用它。上面的變量估計器應該是svm_linear_estimator。 – 2013-05-13 08:53:30

+1

我剛剛意識到os.path.exists()比使用try catch更聰明:) – 2013-05-21 14:30:10