Beispiele für eine Klasse SVM in R.

8

Ich versuche, SVM in einer Klasse in R auszuführen. Ich habe versucht, das Kernlab-Paket e1071 / ksvm zu verwenden. Aber ich bin mir nicht sicher, ob ich es richtig mache.

Gibt es ein funktionierendes Beispiel für SVM einer Klasse in R?

Ebenfalls,

  • Ich gebe eine große Matrix von Prädiktoren als X. Da angenommen wird, dass es sich um eine Klasse handelt, ist die Annahme, dass alle Trainingsdaten, die ich gegeben habe, eine positive Klasse sind? Wenn ja, müssen wir die Bezeichnungen nicht mit "Y" versehen?
  • Die als Ausgabe angegebenen vorhergesagten Bezeichnungen sind Wahr / Falsch. Ich gehe also davon aus, dass True eine „positive“ Klasse ist.

Bearbeiten: Beispielcode anhängen. Hier habe ich 60% der 'TRUE'-Klasse abgetastet und den vollständigen Datensatz getestet.

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
quelle
1
Ihre Annahmen sind richtig. Es wäre jedoch viel einfacher, Ihnen zu helfen, wenn Sie Code bereitstellen würden.
Marc Claesen
Vielen Dank an Joel für diesen Beitrag. Wenn ich diesen Code anwende, ist meine Genauigkeit jedoch sehr gering als bei Verwendung der beiden Klassen mehtods. Ist das wahr? Ich vergleiche derzeit beide Methoden, um die zu verwendende Methode auszuwählen. Insbesondere in meinem Fall, in dem keine Daten zu Abwesenheiten vorliegen (die andere Klasse), vergleiche ich derzeit die 1-Klassen-Methode mit 2 Klassen-Methoden (mit Pseudo-Abwesenheiten). Jede Hilfe in dieser Hinsicht wäre dankbar, Grüße.
Ahmed El-Gabbas
Die sauberste Korrektur des Fehlers des obigen Codes erfolgt in der Zeile inTrain: inTrain <-as.numeric (rownames (trainPositive)) [createDataPartition (1: nrow (trainPositive), p = 0,6, list = FALSE)]
enfascination

Antworten:

2

Ich stelle eine korrigierte Version des obigen Codes zur Verfügung. Ihre Auswahl der 'Zugprädiktoren' ist falsch, weil Sie aus der Iris anstelle von 'trainPositive' ausgewählt haben, aber den Index aus 'trainPositive' ausgewählt haben. Genauigkeit: Zug = 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
quelle