Obliczanie granicy decyzyjnej liniowego modelu SVM

19

Biorąc pod uwagę wektory wspierające liniowej SVM, jak mogę obliczyć równanie granicy decyzji?

dshin
źródło
w = suma ponad i (ai ti xi). będziesz musiał zminimalizować lagrangian, aby znaleźć wartości mnożników, ai. zastanawiam się, skąd masz wektory wsparcia? ten sam proces powinien również dać ci wartość ai.
euphoria83,
2
Nie mogę jeszcze komentować, ale myślę, że w przyjętej odpowiedzi nie powinienem decydować o linii i marginesach: abline (b / w [2], - w [1] / w [2]) abline ((b + 1) / w [2], - w [1] / w [2], lty = 2) abline ((b-1) / w [2], - w [1] / w [2], lty = 2), ponieważ abline przyjmuje wprowadzić odpowiednio jako punkt przecięcia i nachylenie? wx-b = 0 co oznacza: w1.x1 + w2.x2 = b co oznacza (ponieważ x2 to „y”) abline (b / w [2], -w [1] / w [2]) Przepraszamy to stary post, ale pomyślałem, że zapytam.
Nepze Tyson
Witamy na stronie @Nepze Tyson. To nie jest odpowiedź na pytanie PO. Użyj tylko pola „Twoja odpowiedź”, aby podać odpowiedzi. Jeśli masz własne pytanie, kliknij [ASK QUESTION]u góry strony i zadaj je tam, a my możemy ci właściwie pomóc. Ponieważ jesteś tutaj nowy, możesz przeczytać naszą stronę przewodnika , która zawiera informacje dla nowych użytkowników.
gung - Przywróć Monikę
@Nepze Dziękuję za Twój spostrzegawczy komentarz oraz za poświęcony czas i uwagę, aby to zrobić. Oczekuję, że doprowadzi to do poprawy odpowiedzi tutaj. Chciałbym również dołączyć do Gung, witając Cię na naszej stronie.
whuber

Odpowiedzi:

29

Elements of Statistical Learning , z Hastie i wsp., Posiada kompletny rozdział dotyczący wsparcia klasyfikatorów wektorowych i SVMs (w przypadku, zacznij stronę 418 na 2. edycji). Kolejnym dobrym tutorialem jest Support Vector Machines in R autorstwa Davida Meyera.

xT.β+β0=0β=1β02)/β

Z pomocy on-line ksvm()w kernlab pakietu R, ale patrz też kernlab - An S4 Pakietu jądro Methods in R , tutaj jest przykład zabawki:

set.seed(101)
x <- rbind(matrix(rnorm(120),,2),matrix(rnorm(120,mean=3),,2))
y <- matrix(c(rep(1,60),rep(-1,60)))
svp <- ksvm(x,y,type="C-svc")
plot(svp,data=x)

Pamiętaj, że dla jasności nie bierzemy pod uwagę próbek pociągów i testów. Wyniki pokazano poniżej, gdzie cieniowanie kolorów pomaga wizualizować dopasowane wartości decyzji; wartości około 0 znajdują się na granicy decyzji.

alternatywny tekst

Wywołanie attributes(svp)daje atrybuty, do których można uzyskać dostęp, np

alpha(svp)  # support vectors whose indices may be 
            # found with alphaindex(svp)
b(svp)      # (negative) intercept 

Aby wyświetlić granicę decyzji z odpowiadającym jej marginesem, spróbujmy wykonać następujące czynności (w przeskalowanej przestrzeni), która jest w dużej mierze zainspirowana tutorialem SVM napisanym jakiś czas temu przez Jean-Philippe Vert :

plot(scale(x), col=y+2, pch=y+2, xlab="", ylab="")
w <- colSums(coef(svp)[[1]] * x[unlist(alphaindex(svp)),])
b <- b(svp)
abline(b/w[1],-w[2]/w[1])
abline((b+1)/w[1],-w[2]/w[1],lty=2)
abline((b-1)/w[1],-w[2]/w[1],lty=2)

A oto:

alternatywny tekst

chl
źródło
4
Piękne, dokładnie to, czego szukałem. Dwie linie: w <- colSums (coef (svp) [[1]] * x [unlist (alphaindex (svp)),]) b <- b (svp) były darem niebios. Dziękuję Ci!
dshin
@chi: interesujące może być spojrzenie na moją odpowiedź na „jak obliczyć granicę decyzyjną SVM”: stats.stackexchange.com/questions/164935/…
4

Jest to liniowa kombinacja wektorów podporowych, w których współczynniki są podawane przez mnożniki Lagrange'a odpowiadające tym wektorom podporowym.

ebony1
źródło