J'essaie de comprendre le processus de formation d'une machine à vecteur de support linéaire . Je me rends compte que les propriétés des SMV leur permettent d'être optimisées beaucoup plus rapidement qu'en utilisant un solveur de programmation quadratique, mais à des fins d'apprentissage, j'aimerais voir comment cela fonctionne.
Données d'entraînement
set.seed(2015)
df <- data.frame(X1=c(rnorm(5), rnorm(5)+5), X2=c(rnorm(5), rnorm(5)+3), Y=c(rep(1,5), rep(-1, 5)))
df
X1 X2 Y
1 -1.5454484 0.50127 1
2 -0.5283932 -0.80316 1
3 -1.0867588 0.63644 1
4 -0.0001115 1.14290 1
5 0.3889538 0.06119 1
6 5.5326313 3.68034 -1
7 3.1624283 2.71982 -1
8 5.6505985 3.18633 -1
9 4.3757546 1.78240 -1
10 5.8915550 1.66511 -1
library(ggplot2)
ggplot(df, aes(x=X1, y=X2, color=as.factor(Y)))+geom_point()
Trouver l'hyperplan de la marge maximale
Selon cet article Wikipedia sur les SVM , pour trouver l'hyperplan de marge maximale que je dois résoudre
sous réserve (pour tout i = 1, ..., n)
Comment «brancher» mes données d'exemple dans un solveur QP dans R (par exemple quadprog ) pour déterminer ?
r
svm
optimization
Ben
la source
la source
R
? etc.Réponses:
CONSEIL :
Quadprog résout les problèmes suivants:
Considérez
où est la matrice d'identité.I
Si est et est :w p×1 y n×1
Sur des lignes similaires:
Formulez utilisant les conseils ci-dessus pour représenter votre contrainte d'inégalité.A
la source
quadprog
renvoie l'erreur "la matrice D en fonction quadratique n'est pas définie positive!"Suivre les conseils de rightskewed ...
la source