W przypadku ogólnego jądra trudno jest zinterpretować wagi SVM, jednak w przypadku liniowego SVM istnieje przydatna interpretacja:
1) Przypomnij sobie, że w liniowej SVM wynikiem jest hiperpłaszczyzna, która najlepiej oddziela klasy. Wagi reprezentują tę hiperpłaszczyznę, podając współrzędne wektora prostopadłego do hiperpłaszczyzny - są to współczynniki podane przez svm.coef_. Nazwijmy ten wektor w.
2) Co możemy zrobić z tym wektorem? Jego kierunek daje nam przewidywaną klasę, więc jeśli weźmiesz iloczyn punktowy dowolnego punktu z wektorem, możesz powiedzieć, po której stronie jest: jeśli iloczyn iloczynu jest dodatni, należy do klasy dodatniej, jeśli jest ujemny należy do klasy negatywnej.
3) Na koniec możesz nawet dowiedzieć się czegoś o znaczeniu każdej funkcji. To moja interpretacja, więc najpierw przekonaj się. Powiedzmy, że svm znalazłby tylko jedną cechę przydatną do rozdzielenia danych, a wówczas hiperpłaszczyzna byłaby prostopadła do tej osi. Można więc powiedzieć, że bezwzględna wielkość współczynnika w stosunku do pozostałych daje wskazanie, jak ważna była ta cecha dla separacji. Na przykład, jeśli do rozdzielenia zostanie użyta tylko pierwsza współrzędna, w będzie miało postać (x, 0), gdzie x jest liczbą niezerową, a następnie | x |> 0.
@B_Miner dzięki! Martwiłem się, że skoro sam o tym pomyślałem, to może być źle (nie jestem z „czystego” CS) - ale myślę, że to prawda.
Bitowy
1
Jakie jest znaczenie kierunku wektora ortogonalnego, jeśli oddziela on obie klasy? Czy ma to coś wspólnego z udziałem hiperpłaszczyzny oddzielającej w ogólnym prawdopodobieństwie przewidywania klas?
Austin Richardson
Aby wyjaśnić, czy znak wagi odnosi się do klasy (w przypadku liniowym) - zależy od cech. Na przykład, jeśli funkcje predykcyjne przyjmują tylko wartości nieujemne ( ), wówczas ujemne wagi przyczyniają się do ujemnej klasyfikacji punktów danych. ≥0
Kdawg
@B_Miner, myślę, że miałeś na myśli link do tego artykułu, a nie innego autorstwa Guyona.
ijoseph
11
Dokumentacja jest całkiem kompletny: dla multiclass przypadku SVC, który jest oparty na bibliotece libsvm wykorzystuje ustawienie jednego vs jeden. W przypadku jądra liniowego n_classes * (n_classes - 1) / 2indywidualne liniowe modele binarne są dopasowywane dla każdej możliwej pary klas. Zatem łączny kształt wszystkich podstawowych parametrów połączonych razem to [n_classes * (n_classes - 1) / 2, n_features](+ [n_classes * (n_classes - 1) / 2przechwytuje w intercept_atrybucie).
W przypadku binarnego problemu liniowego wykreślanie oddzielającej hiperpłaszczyzny od coef_atrybutu odbywa się w tym przykładzie .
Jeśli chcesz uzyskać szczegółowe informacje na temat znaczenia dopasowanych parametrów, szczególnie w przypadku nieliniowego przypadku jądra, zajrzyj do sformułowania matematycznego i odniesień wymienionych w dokumentacji.
W dokumentacji Sklearn atrybut coef_ ma kształt = [n_klasa-1, n_funkcje]. Uważam, że to pomyłka.
Naomi
6
Próbuję zinterpretować zmienne wagi podane przez dopasowanie liniowego SVM.
Dobrym sposobem na zrozumienie, w jaki sposób obliczane są wagi i jak je interpretować w przypadku liniowej SVM, jest wykonanie obliczeń ręcznie na bardzo prostym przykładzie.
Przykład
Rozważ następujący zestaw danych, który można liniowo oddzielić
import numpy as np
X = np.array([[3,4],[1,4],[2,3],[6,-1],[7,-1],[5,-3]])
y = np.array([-1,-1,-1,1,1,1])
Rozwiązanie problemu SVM przez inspekcję
Po inspekcji możemy zobaczyć, że linią graniczną oddzielającą punkty o największym „marginesie” jest linia . Ponieważ wagi SVM są proporcjonalne do równania tej linii decyzyjnej (hiperpłaszczyzna w wyższych wymiarach) przy użyciu pierwsze przypuszczenie parametrów byłobyx2=x1−3wTx+b=0
w=[1,−1]b=−3
Teoria SVM mówi nam, że „szerokość” marginesu jest wyrażona przez . Stosując powyższą przypuszczenie chcemy uzyskać szerokość o . co przez kontrolę jest nieprawidłowe. Szerokość wynosi2||w||22√=2–√42–√
Przypomnijmy, że skalowanie granicy przez współczynnik nie zmienia linii granicznej, dlatego możemy uogólnić równanie jakoc
cx1−cx2−3c=0
w=[c,−c]b=−3c
Wracając do równania dla szerokości, którą otrzymujemy
2||w||22–√cc=14=42–√=42–√
Zatem parametry (lub współczynniki) są w rzeczywistości
w=[14,−14]b=−34
(Używam scikit-learn)
Oto ja, oto kod do sprawdzenia naszych ręcznych obliczeń
from sklearn.svm import SVC
clf = SVC(C =1e5, kernel ='linear')
clf.fit(X, y)print('w = ',clf.coef_)print('b = ',clf.intercept_)print('Indices of support vectors = ', clf.support_)print('Support vectors = ', clf.support_vectors_)print('Number of support vectors for each class = ', clf.n_support_)print('Coefficients of the support vector in the decision function = ', np.abs(clf.dual_coef_))
w = [[0,25 -0,25]] b = [-0,75]
Wskaźniki wektorów wsparcia = [2 3]
Wektory wsparcia = [[2. 3.] [6. -1.]]
Liczba wektorów pomocniczych dla każdej klasy = [1 1]
Współczynniki wektora podporowego w funkcji decyzyjnej = [[0,0625 0,0625]]
Czy znak wagi ma coś wspólnego z klasą?
Nie bardzo, znak wag ma związek z równaniem płaszczyzny granicznej.
Sprawdź ten artykuł na temat wyboru funkcji . Autorzy używają kwadratu wag (atrybutów) przypisanego przez liniowy SVM jądra jako metryki rankingowej przy podejmowaniu decyzji o przydatności konkretnego atrybutu. Jest to jeden z najczęściej cytowanych sposobów wyboru genów z danych mikromacierzy.
Świetny artykuł Guyona i Elisseeff (2003). Wprowadzenie do wyboru zmiennych i funkcji. Journal of machine learning research, 1157-1182 mówi: „Konstruowanie i wybieranie podzbiorów funkcji przydatnych do budowy dobrego predyktora kontrastuje z problemem znalezienia lub uszeregowania wszystkich potencjalnie istotnych zmiennych. Wybór najbardziej odpowiednich zmiennych jest zwykle nieoptymalny do zbudowania predyktor, szczególnie jeśli zmienne są redundantne. Odwrotnie, podzbiór użytecznych zmiennych może wykluczać wiele redundantnych, ale istotnych zmiennych. "
Dlatego zalecam ostrożność przy interpretacji wag modeli liniowych w ogóle (w tym regresji logistycznej, regresji liniowej i SVM jądra liniowego). Wagi SVM mogą kompensować, jeśli dane wejściowe nie zostaną znormalizowane. Waga SVM dla określonej operacji zależy również od innych operacji, zwłaszcza jeśli są one skorelowane. Aby określić znaczenie poszczególnych funkcji, lepszym wyborem są metody rankingu cech.
Dokumentacja jest całkiem kompletny: dla multiclass przypadku SVC, który jest oparty na bibliotece libsvm wykorzystuje ustawienie jednego vs jeden. W przypadku jądra liniowego
n_classes * (n_classes - 1) / 2
indywidualne liniowe modele binarne są dopasowywane dla każdej możliwej pary klas. Zatem łączny kształt wszystkich podstawowych parametrów połączonych razem to[n_classes * (n_classes - 1) / 2, n_features]
(+[n_classes * (n_classes - 1) / 2
przechwytuje wintercept_
atrybucie).W przypadku binarnego problemu liniowego wykreślanie oddzielającej hiperpłaszczyzny od
coef_
atrybutu odbywa się w tym przykładzie .Jeśli chcesz uzyskać szczegółowe informacje na temat znaczenia dopasowanych parametrów, szczególnie w przypadku nieliniowego przypadku jądra, zajrzyj do sformułowania matematycznego i odniesień wymienionych w dokumentacji.
źródło
Dobrym sposobem na zrozumienie, w jaki sposób obliczane są wagi i jak je interpretować w przypadku liniowej SVM, jest wykonanie obliczeń ręcznie na bardzo prostym przykładzie.
Przykład
Rozważ następujący zestaw danych, który można liniowo oddzielić
Rozwiązanie problemu SVM przez inspekcję
Po inspekcji możemy zobaczyć, że linią graniczną oddzielającą punkty o największym „marginesie” jest linia . Ponieważ wagi SVM są proporcjonalne do równania tej linii decyzyjnej (hiperpłaszczyzna w wyższych wymiarach) przy użyciu pierwsze przypuszczenie parametrów byłobyx2=x1−3 wTx+b=0
Teoria SVM mówi nam, że „szerokość” marginesu jest wyrażona przez . Stosując powyższą przypuszczenie chcemy uzyskać szerokość o . co przez kontrolę jest nieprawidłowe. Szerokość wynosi2||w|| 22√=2–√ 42–√
Przypomnijmy, że skalowanie granicy przez współczynnik nie zmienia linii granicznej, dlatego możemy uogólnić równanie jakoc
Wracając do równania dla szerokości, którą otrzymujemy
Zatem parametry (lub współczynniki) są w rzeczywistościw=[14,−14] b=−34
Oto ja, oto kod do sprawdzenia naszych ręcznych obliczeń
Nie bardzo, znak wag ma związek z równaniem płaszczyzny granicznej.
Źródło
https://ai6034.mit.edu/wiki/images/SVM_and_Boosting.pdf
źródło
Sprawdź ten artykuł na temat wyboru funkcji . Autorzy używają kwadratu wag (atrybutów) przypisanego przez liniowy SVM jądra jako metryki rankingowej przy podejmowaniu decyzji o przydatności konkretnego atrybutu. Jest to jeden z najczęściej cytowanych sposobów wyboru genów z danych mikromacierzy.
źródło
Świetny artykuł Guyona i Elisseeff (2003). Wprowadzenie do wyboru zmiennych i funkcji. Journal of machine learning research, 1157-1182 mówi: „Konstruowanie i wybieranie podzbiorów funkcji przydatnych do budowy dobrego predyktora kontrastuje z problemem znalezienia lub uszeregowania wszystkich potencjalnie istotnych zmiennych. Wybór najbardziej odpowiednich zmiennych jest zwykle nieoptymalny do zbudowania predyktor, szczególnie jeśli zmienne są redundantne. Odwrotnie, podzbiór użytecznych zmiennych może wykluczać wiele redundantnych, ale istotnych zmiennych. "
Dlatego zalecam ostrożność przy interpretacji wag modeli liniowych w ogóle (w tym regresji logistycznej, regresji liniowej i SVM jądra liniowego). Wagi SVM mogą kompensować, jeśli dane wejściowe nie zostaną znormalizowane. Waga SVM dla określonej operacji zależy również od innych operacji, zwłaszcza jeśli są one skorelowane. Aby określić znaczenie poszczególnych funkcji, lepszym wyborem są metody rankingu cech.
źródło