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')

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:



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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.