2014-10-08 10 views
6

Używam LinearSVC z biblioteki naukowego scikit i zastanawiam się, czy możliwe jest jakoś wyciągnąć wektory, które mój model używa po treningu do przewidywania. Próbowałem google przez jakiś czas, ale bez szczęścia. Ktokolwiek wie?scikit-learn, linearsvc - jak uzyskać wektory pomocnicze od wyszkolonego SVM?

+0

Mam na myśli wektory pomocnicze, "LinearSVC" w ogóle ich nie używa. –

+0

'LinearSVC' nie korzysta z wektora wsparcia, ale koncepcja nadal istnieje i może być nadal przydatna. –

Odpowiedz

4

Niestety wydaje się, że nie ma sposobu, aby to zrobić. LinearSVC wywołuje liblinear (see relevant code), ale nie pobiera wektorów, tylko współczynniki i punkt przecięcia.

Alternatywą byłoby użyć SVC z 'liniowym' jądra (libsvm zamiast liblinear based), ale również poly, dbf i sigmoid jądra obsługują tę opcję:

from sklearn import svm 

X = [[0, 0], [1, 1]] 
y = [0, 1] 

clf = svm.SVC(kernel='linear') 
clf.fit(X, y) 
print clf.support_vectors_ 

wyjściowa:

[[ 0. 0.] 
[ 1. 1.]] 

liblinear skaluje się lepiej do dużej liczby próbek, ale poza tym są w większości równoważne.

+0

Dzięki, Elyase. Jeśli będę używał innych typów SVC dostępnych w nauce scikit, czy będzie możliwe zwrócenie wektorów (lub jak je poprawnie nazwać, jeśli użyję opisów wielomianowych) w jakiś sposób? –

+0

@MaximHaytovich, Tak, zaktualizowałem swoją odpowiedź. – elyase

2

Nie jestem pewien, czy to pomaga, ale szukałem czegoś podobnego, a wniosek, że jeżeli:

clf = svm.LinearSVC() 

Wtedy to:

clf.decision_function(x) 

jest równa:

clf.cof_.dot(x) + clf.intercept_