Ejemplos para una clase SVM en R

8

Estoy tratando de hacer SVM de una clase en R. He estado tratando de usar el paquete kernlab e1071 / ksvm. Pero no estoy seguro si lo estoy haciendo correctamente.

¿Hay algún ejemplo de trabajo para SVM de una clase en R?

También,

  • Estoy dando una gran matriz de predictores como X. Dado que se supone que es de una clase, ¿se supone que todos los datos de entrenamiento que proporcioné forman una clase 'positiva'? Si es así, ¿no tenemos que dar las etiquetas 'Y'?
  • Las etiquetas predichas dadas como salida son Verdadero / Falso. Así que supongo que True es una clase 'positiva'.

Editar: Adjuntar código de muestra. Aquí probé el 60% de la clase 'TRUE' y probé en el conjunto de datos completo.

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
fuente
1
Tus suposiciones son correctas. Sin embargo, sería mucho más fácil ayudarlo si proporcionara algún código.
Marc Claesen
Gracias Joel por esta publicación, sin embargo, al aplicar este código, me da una precisión muy baja que cuando utilizo los dos métodos de clase. ¿Es esto cierto? Actualmente estoy comparando ambos métodos para elegir qué método usar; especialmente en mi caso sin datos sobre ausencias (la otra clase) y actualmente estoy comparando el método de 1 clase con 2 métodos de clase (con pseudo-ausencias). Agradecería cualquier ayuda a este respecto, Saludos.
Ahmed El-Gabbas
La corrección más clara del error del código anterior es en la línea inTrain: inTrain <-as.numeric (rownames (trainPositive)) [createDataPartition (1: nrow (trainPositive), p = 0.6, list = FALSE)]
enfascination el

Respuestas:

2

Estoy proporcionando una versión rectificada del código anterior. La selección de 'trainpredictors' es incorrecta porque seleccionaste de iris en lugar de 'trainPositive' pero indicaste seleccionaste de 'trainPositive'. Precisión: tren = 78.125 prueba = 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
fuente