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