Contoh untuk Satu kelas SVM di R

8

Saya mencoba melakukan satu kelas SVM di R. Saya telah mencoba menggunakan paket kernlab e1071 / ksvm. Tetapi saya tidak yakin apakah saya melakukannya dengan benar.

Apakah ada contoh kerja untuk satu kelas SVM di R?

Juga,

  • Saya memberikan matriks besar prediktor sebagai X. Karena itu seharusnya satu kelas, apakah asumsi bahwa semua data pelatihan yang saya berikan bentuk kelas 'positif'? Jika demikian, kita tidak harus memberikan label 'Y'?
  • Label yang diprediksi diberikan sebagai keluaran adalah Benar / Salah. Jadi saya berasumsi, True adalah kelas 'positif'.

Sunting: Melampirkan kode sampel. Di sini saya mengambil sampel 60% dari kelas 'BENAR' dan saya menguji pada set data lengkap.

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
sumber
1
Asumsi Anda benar. Namun, akan jauh lebih mudah untuk membantu Anda jika Anda akan memberikan beberapa kode.
Marc Claesen
Terima kasih Joel untuk posting ini, namun ketika menerapkan kode ini, itu memberi saya akurasi yang sangat rendah daripada ketika menggunakan dua kelas mehtods. Apakah ini benar? Saat ini saya membandingkan kedua metode untuk memilih metode mana yang akan digunakan; terutama dalam kasus saya yang tidak memiliki data absensi (kelas lain) dan saya saat ini membandingkan metode kelas 1 dengan metode kelas 2 (dengan absensi pseudo). Setiap bantuan dalam hal ini akan dihargai, Salam.
Ahmed El-Gabbas
Koreksi paling bersih dari kesalahan kode di atas adalah ke baris inTrain: inTrain <-as.numeric (rownames (trainPositive)) [createDataPartition (1: nrow (trainPositive), p = 0,6, list = FALSE)]
enfascination pada

Jawaban:

2

Saya menyediakan versi yang diperbaiki dari kode di atas. Pilihan 'trainpredictors' Anda salah karena Anda memilih dari iris alih-alih 'trainPositive' tetapi indeks Anda dipilih dari 'trainPositive'. Akurasi: kereta = 78,125 tes = 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
sumber