2013-03-22 3 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

답변

17

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

1.2.4 모델의 지속성 그것은 사용하여 scikit의 모델을 저장 할 수 있습니다 파이썬의 내장 지속성 모델, 즉 피클. scikit의 특정 경우

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

, 그것은 빅 데이터에 더 효율적입니다 피클의 JOBLIB의 교체를 사용하는 것이 더 재미있을 수 있지만, 수 만 피클 문자열로 디스크가 아닌 :

당신이 훈련 모델을 저장할 때
>>> from sklearn.externals import joblib 
>>> joblib.dump(clf, ’filename.pkl’) 
+1

링크가 끊어졌습니다. 이것을 대신 사용하십시오 : http://scikit-learn.org/stable/modules/model_persistence.html – Tommz

+0

피클을 사용하면 특정 scikit 버전에 묶이지 만 모델의 장기 보관에는 좋은 해결책이 아닙니다. – Adversus

3

나중에 사용할 수 있도록 모델을 저장할 수 있습니다. 이전에 장착하고 저장 한 모델이있을 때 모델을 사용하려면 아래 코드를 작성했습니다. scikit 설명서에서

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이어야합니다. –

+1

방금 ​​os.path.exists()가 try catch를 사용하는 것보다 더 똑똑하다는 것을 깨달았습니다. –

관련 문제