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

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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.