Calcul de la frontière de décision d'un modèle SVM linéaire

19

Étant donné les vecteurs de support d'un SVM linéaire, comment puis-je calculer l'équation de la frontière de décision?

dshin
la source
w = somme sur i (ai ti xi). vous devrez minimiser le lagrangien pour trouver les valeurs des multiplicateurs, ai. je me demande comment vous avez obtenu les vecteurs de support? le même processus devrait également donner à u la valeur de ai.
euphoria83
2
Je ne peux pas encore commenter mais je pense que dans la réponse acceptée, la ligne de décision et les marges ne devraient pas être: abline (n / b [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) car l'abline prend entrée comme interception et pente respectivement? wx-b = 0 ce qui implique: w1.x1 + w2.x2 = b ce qui implique (puisque x2 est le "y") abline (n / b [2], -w [1] / w [2]) Désolé est un ancien poste mais je pensais que je demanderais.
Nepze Tyson
Bienvenue sur le site, @Nepze Tyson. Ce n'est pas une réponse à la question du PO. Veuillez utiliser uniquement le champ «Votre réponse» pour fournir des réponses. Si vous avez votre propre question, cliquez sur [ASK QUESTION]en haut de la page et posez-la là, alors nous pouvons vous aider correctement. Puisque vous êtes nouveau ici, vous voudrez peut-être lire notre page de visite , qui contient des informations pour les nouveaux utilisateurs.
gung - Rétablir Monica
@Nepze Merci pour votre commentaire perspicace et pour le temps et l'attention que vous avez consacrés à sa réalisation. J'espère que cela mènera à une meilleure réponse ici. Je voudrais également rejoindre gung pour vous souhaiter la bienvenue sur notre site.
whuber

Réponses:

29

The Elements of Statistical Learning , de Hastie et al., Contient un chapitre complet sur les classificateurs de vecteurs de support et les SVM (dans votre cas, commencez la page 418 de la 2e édition). Un autre bon tutoriel est Support Vector Machines in R , par David Meyer.

XTβ+β0=0β=1β02/β

À partir de l'aide en ligne de ksvm()dans le package kernlab R, mais voir aussi kernlab - Un package S4 pour les méthodes du noyau dans R , voici un exemple de jouet:

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)

Notez que pour plus de clarté, nous ne considérons pas les échantillons de train et de test. Les résultats sont présentés ci-dessous, où l'ombrage des couleurs permet de visualiser les valeurs de décision ajustées; les valeurs autour de 0 sont sur la frontière de décision.

texte alternatif

L'appel attributes(svp)vous donne des attributs auxquels vous pouvez accéder, par exemple

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

Donc, pour afficher la frontière de décision, avec sa marge correspondante, essayons ce qui suit (dans l'espace redimensionné), qui est largement inspiré d'un tutoriel sur SVM fait il y a quelque temps par 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)

Et le voici:

texte alternatif

chl
la source
4
Magnifique, exactement ce que je cherchais. Les deux lignes: w <- colSums (coef (svp) [[1]] * x [unlist (alphaindex (svp)),]) b <- b (svp) étaient une aubaine. Je vous remercie!
dshin
@chi: il peut être intéressant de jeter un coup d'œil à ma réponse à "comment calculer la limite de décision d'un SVM": stats.stackexchange.com/questions/164935/…
4

C'est une combinaison linéaire des vecteurs support où les coefficients sont donnés par les multiplicateurs de Lagrange correspondant à ces vecteurs support.

ébène1
la source