Calcolo del limite decisionale di un modello SVM lineare


19

Dati i vettori di supporto di un SVM lineare, come posso calcolare l'equazione del limite decisionale?


w = somma su i (ai ti xi). dovrai minimizzare il lagrangiano per trovare i valori dei moltiplicatori, ai. mi chiedo come hai ottenuto i vettori di supporto? lo stesso processo dovrebbe anche darti il ​​valore di ai.
euforia83,

2
Non posso ancora commentare, ma penso che nella risposta accettata non dovrebbero esserci la linea di decisione e i margini: 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) poiché abline accetta input come intercetta e pendenza rispettivamente? wx-b = 0 che implica: w1.x1 + w2.x2 = b che implica (poiché x2 è la "y") abline (b / w [2], -w [1] / w [2]) Scusami questo è un vecchio post ma ho pensato di chiedere.
Nepze Tyson,

Benvenuto nel sito, @Nepze Tyson. Questa non è una risposta alla domanda del PO. Utilizza solo il campo "La tua risposta" per fornire risposte. Se hai una tua domanda, fai clic su [ASK QUESTION]nella parte superiore della pagina e ponila lì, quindi possiamo aiutarti correttamente. Dato che sei nuovo qui, potresti voler leggere la nostra pagina del tour , che contiene informazioni per i nuovi utenti.
gung - Ripristina Monica

@Nepze Grazie per il tuo commento percettivo e per il tempo e l'attenzione che hai preso per farlo. Mi aspetto che porti a una risposta migliore qui. Vorrei anche unirmi a Gung per darvi il benvenuto sul nostro sito.
whuber

Risposte:


29

The Elements of Statistical Learning , di Hastie et al., Ha un capitolo completo sui classificatori di vettori e SVM di supporto (nel tuo caso, inizia a pagina 418 della 2a edizione). Un altro buon tutorial è Support Vector Machines in R , di David Meyer.

A meno che non abbia frainteso la tua domanda, il limite di decisione (o iperpiano) è definito da (con e il termine di intercettazione), o come ha detto @ebony una combinazione lineare dei vettori di supporto. Il margine è quindi, a seguito di Hastie et al. notazioni.β = 1 β 0 2 /β XTβ+β0=0β=1β02/β

Dall'aiutoksvm() in linea di nel pacchetto kernlab R, ma vedi anche kernlab - Un pacchetto S4 per i metodi del kernel in R , ecco un esempio giocattolo:

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)

Si noti che per motivi di chiarezza, non prendiamo in considerazione la formazione e il test dei campioni. I risultati sono mostrati di seguito, dove l'ombreggiatura dei colori aiuta a visualizzare i valori decisionali adattati; i valori intorno a 0 sono al limite della decisione.

testo alternativo

La chiamata attributes(svp)ti dà gli attributi a cui puoi accedere, ad es

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

Quindi, per mostrare il confine decisionale, con il suo margine corrispondente, proviamo quanto segue (nello spazio riscalato), che è in gran parte ispirato a un tutorial su SVM fatto qualche tempo fa da 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)

Ed eccolo qui:

testo alternativo


4
Bello, esattamente quello che stavo cercando. Le due righe: w <- colSums (coef (svp) [[1]] * x [unlist (alphaindex (svp)),]) b <- b (svp) erano una manna dal cielo. Grazie!
dshin,

@chi: può essere interessante dare un'occhiata alla mia risposta a "come calcolare il limite di decisione di un SVM": stats.stackexchange.com/questions/164935/…

4

È una combinazione lineare dei vettori di supporto in cui i coefficienti sono dati dai moltiplicatori di Lagrange corrispondenti a questi vettori di supporto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.