Comment obtenir des limites de décision à partir de SVM linéaire dans R?

9

J'ai besoin d'un package qui peut me donner l'équation d'un modèle SVM linéaire. Actuellement, j'utilise e1071 comme ceci:

library(e1071)
m = svm(data, labels, type='C', kernel='linear', cost=cost, probability=FALSE, scale=scale)
w = t(m$coefs) %*% data[m$index,]  #Weight vector
b = -model$rho #Offset

Cependant, je ne sais pas comment e1071::svm()sélectionne les classes positives et négatives, donc je pense que cela pourrait bousiller avec différents ensembles de données. Quelqu'un peut-il confirmer comment cette fonction décide quelle classe est positive et laquelle est négative?

Existe-t-il également un meilleur package pour cela?

reisner
la source
1
J'ai fourni quelques informations à ce sujet sur un sujet connexe: Calcul de la frontière de décision d'un modèle SVM linéaire .
chl

Réponses:

1

xd

d <- sum(w * x) + b

d>0x+11newdata

predict(m, newdata)

ou

predict(m, newdata, decision.values = TRUE)

Soyez prudent lorsque vous utilisez SVM à partir du package e1071, voir Problème avec libsvm e1071? question. Plusieurs autres packages SVM pour R sont kernlab, klaR et svmpath, voir cet aperçu: Prise en charge des machines vectorielles dans R par A. Karatzoglou et D. Meyer.

Leo
la source
2
Merci, mais ma question concerne la façon dont j'obtiens les valeurs w et b. En outre, à propos de la valeur de décision, je demande comment e1071 décide quelle étiquette donnée est positive et négative pour les données de formation lorsque vous transmettez les facteurs.
reisner
1
Je ne connais pas e1071, mais je connais SVM. Le fait qu'une classe soit considérée comme positive ou négative n'affectera pas le résultat. Vous pouvez prendre n'importe quel ensemble de données et échanger les étiquettes de classe et vous devriez toujours obtenir le même résultat en termes de classification des points de test (pour les mêmes paramètres). Le positif et le négatif sont utilisés pour déterminer si l'instance tombe du côté droit de la frontière de décision.
karenu