Exemples pour une classe SVM dans R

8

J'essaie de faire du SVM à une classe dans R. J'ai essayé d'utiliser le package kernlab e1071 / ksvm. Mais je ne sais pas si je le fais correctement.

Existe-t-il un exemple de travail pour SVM à une classe dans R?

Aussi,

  • Je donne une grande matrice de prédicteurs sous forme de X. Puisqu'il est censé être à une seule classe, l'hypothèse selon laquelle toutes les données de formation que j'ai données sont de classe «positive»? Si oui, nous ne devons pas donner les étiquettes «Y»?
  • Les étiquettes prévues fournies en sortie sont True / False. Je suppose donc que True est une classe «positive».

Modifier: joindre un exemple de code. Ici, j'ai échantillonné 60% de la classe «VRAI» et j'ai testé sur l'ensemble des données.

library(e1071)
library(caret)

data(iris)

iris$SpeciesClass[iris$Species=="versicolor"] <- "TRUE"
iris$SpeciesClass[iris$Species!="versicolor"] <- "FALSE"
trainPositive<-subset(iris,SpeciesClass=="TRUE")
inTrain<-createDataPartition(1:nrow(trainPositive),p=0.6,list=FALSE)
trainpredictors<-iris[inTrain,1:4]
testpredictors<-iris[,1:4]
testLabels<-iris[,6]

svm.model<-svm(trainpredictors,y=NULL,
               type='one-classification',
               nu=0.5,
               scale=TRUE,
               kernel="radial")
svm.pred<-predict(svm.model,testpredictors)
confusionMatrixTable<-table(Predicted=svm.pred,Reference=testLabels)
confusionMatrix(confusionMatrixTable,positive='TRUE')
Joel
la source
1
Vos hypothèses sont correctes. Cependant, il serait beaucoup plus facile de vous aider si vous fournissiez du code.
Marc Claesen
Merci Joel pour ce post, cependant lors de l'application de ce code, il me donne une très faible précision que lors de l'utilisation des mehtods des deux classes. Est-ce vrai? Je compare actuellement les deux méthodes pour choisir la méthode à utiliser; surtout dans mon cas n'ayant pas de données sur les absences (l'autre classe) et je compare actuellement la méthode 1 classe avec 2 méthodes classe (avec pseudo-absences). Toute aide à cet égard serait appréciée, Cordialement.
Ahmed El-Gabbas
La correction la plus nette de l'erreur du code ci-dessus est la ligne inTrain: inTrain <-as.numeric (rownames (trainPositive)) [createDataPartition (1: nrow (trainPositive), p = 0.6, list = FALSE)]
enfascination le

Réponses:

6

L'exercice de laboratoire du chapitre 9 intitulé An Introduction to Statistical Learning fournit un exemple pratique d'utilisation d'un SVM pour la classification binaire, et il utilise en effet la bibliothèque e1071. Avec l'autorisation de l'éditeur, une version PDF du livre est disponible en téléchargement gratuit.

Kevin Markham
la source
2

Je fournis une version rectifiée du code ci-dessus. Votre sélection «trainpredictors» est erronée car vous avez sélectionné parmi iris au lieu de «trainPositive» mais l'index u sélectionné dans «trainPositive». Précision: train = 78,125 test = 91,53

library(e1071)
library(caret)
library(NLP)
library(tm)

data(iris)

iris$SpeciesClass[iris$Species=="versicolor"] <- "TRUE"
iris$SpeciesClass[iris$Species!="versicolor"] <- "FALSE"
trainPositive<-subset(iris,SpeciesClass=="TRUE")
testnegative<-subset(iris,SpeciesClass=="FALSE")
inTrain<-createDataPartition(1:nrow(trainPositive),p=0.6,list=FALSE)

trainpredictors<-trainPositive[inTrain,1:4]
trainLabels<-trainPositive[inTrain,6]

testPositive<-trainPositive[-inTrain,]
testPosNeg<-rbind(testPositive,testnegative)

testpredictors<-testPosNeg[,1:4]
testLabels<-testPosNeg[,6]

svm.model<-svm(trainpredictors,y=NULL,
           type='one-classification',
           nu=0.10,
           scale=TRUE,
           kernel="radial")

svm.predtrain<-predict(svm.model,trainpredictors)
svm.predtest<-predict(svm.model,testpredictors)

confTrain<-table(Predicted=svm.predtrain,Reference=trainLabels)
confTest<-table(Predicted=svm.predtest,Reference=testLabels)

confusionMatrix(confTest,positive='TRUE')

print(confTrain)
print(confTest)
Chandan Gautam
la source