Exemplos para uma classe SVM em R

8

Estou tentando fazer o SVM de uma classe em R. Eu tenho tentado usar o pacote e1071 / ksvm kernlab. Mas não tenho certeza se estou fazendo isso corretamente.

Existe algum exemplo de trabalho para SVM de uma classe em R?

Além disso,

  • Estou dando uma grande matriz de preditores como X. Como é suposto ser de uma classe, é a suposição de que todos os dados de treinamento que dei aos formulários classificam a classe 'positiva'? Nesse caso, não precisamos dar os rótulos 'Y'?
  • Os rótulos previstos fornecidos como saída são Verdadeiro / Falso. Portanto, estou assumindo que True é uma classe 'positiva'.

Editar: anexando código de exemplo. Aqui, amostramos 60% da classe 'TRUE' e testei no conjunto de dados 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
fonte
1
Suas suposições estão corretas. No entanto, seria muito mais fácil ajudá-lo se você fornecer algum código.
Marc Claesen
Obrigado Joel por este post, no entanto, ao aplicar esse código, ele me fornece uma precisão muito baixa do que ao usar os dois métodos de classe. Isso é verdade? Atualmente, estou comparando os dois métodos para escolher qual método usar; especialmente no meu caso, sem dados sobre ausências (a outra classe) e atualmente estou comparando o método 1 classe com 2 métodos classe (com pseudo-ausências). Qualquer ajuda a este respeito seria apreciada, Atenciosamente.
Ahmed El-Gabbas
A correção mais limpa do erro do código acima é inTrain line: inTrain <-as.numeric (nomes de usuário (trainPositive)) [createDataPartition (1: nrow (trainPositive), p = 0,6, lista = FALSE)]
enfascination

Respostas:

2

Estou fornecendo a versão retificada do código acima. Sua seleção de 'trainpredictors' está errada porque você selecionou a partir da íris em vez de 'trainPositive', mas o índice selecionou a partir de 'trainPositive'. Precisão: trem = 78,125 teste = 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
fonte