Rの1クラスSVMの例


8

Rで1クラスのSVMを実行しようとしています。e1071/ ksvm kernlabパッケージを使用しようとしています。しかし、私がそれを正しく行っているかどうかはわかりません。

Rの1クラスSVMの実用的な例はありますか?

また、

  • Xとして予測子の大きな行列を与えています。これは1クラスであるはずなので、私が与えたすべてのトレーニングデータは「ポジティブ」クラスを形成すると仮定していますか?もしそうなら、ラベルに「Y」を付ける必要はありませんか?
  • 出力として与えられる予測ラベルはTrue / Falseです。つまり、Trueは「ポジティブ」クラスであると想定しています。

編集:サンプルコードを添付します。ここでは、「TRUE」クラスの60%をサンプリングし、完全なデータセットでテストしました。

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
あなたの仮定は正しいです。ただし、コードを提供する方がはるかに簡単です。
Marc Claesen

この投稿をJoelに感謝します。ただし、このコードを適用すると、2つのクラスメソッドを使用する場合よりも精度が非常に低くなります。これは本当ですか?現在、両方の方法を比較して、使用する方法を選択しています。特に、不在に関するデータがない場合(他のクラス)、現在1クラスのメソッドと2つのクラスメソッド(疑似不在の場合)を比較しています。この点についてのご協力をよろしくお願いいたします。
Ahmed El-Gabbas 2014

上記のコードの誤りのクリーン補正inTrainラインである:inTrain <-as.numeric(rownames(trainPositive))createDataPartition(1:nrow(trainPositive)、P = 0.6、リスト= FALSE)]
enfascination

回答:



2

上記のコードの修正バージョンを提供しています。uは「trainPositive」ではなくアイリスから選択されていますが、インデックスuは「trainPositive」から選択されているため、「trainpredictors」の選択は間違っています。精度:train = 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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.