scikit learn SVM,如何保存/加载支持向量?
使用Python的scikit-learn库中的支持向量机(SVM),在运行完clf.fit(X, Y)之后,你就得到了支持向量。我的问题是,我能否在创建svm.SVC对象时直接加载这些支持向量(作为参数传入)?也就是说,我不需要每次都运行fit()方法来进行预测。
2 个回答
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)
24
来自scikit的手册:http://scikit-learn.org/stable/modules/model_persistence.html
1.2.4 模型持久化
在scikit中,可以使用Python自带的持久化工具来保存模型,这个工具叫做pickle。
>>> 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来替代pickle可能更有意思,因为joblib在处理大数据时更高效,但它只能把数据保存到硬盘上,而不能直接保存为字符串:
>>> from sklearn.externals import joblib
>>> joblib.dump(clf, ’filename.pkl’)