[英]One-class classification with SVM in R
我正在使用R中的包e1071來構建一個類SVM模型。 我不知道該怎么做,我也沒有在互聯網上找到任何例子。
有人可以給出一個示例代碼來表征,例如,使用一類分類模型在“虹膜”數據集中表示“setosa”類,然后測試同一數據集中的所有示例(以便檢查哪些示例屬於“setosa”類的特征和哪些例子沒有)?
我想這就是你想要的:
library(e1071)
data(iris)
df <- iris
df <- subset(df , Species=='setosa') #choose only one of the classes
x <- subset(df, select = -Species) #make x variables
y <- df$Species #make y variable(dependent)
model <- svm(x, y,type='one-classification') #train an one-classification model
print(model)
summary(model) #print summary
# test on the whole set
pred <- predict(model, subset(iris, select=-Species)) #create predictions
輸出:
-摘要:
> summary(model)
Call:
svm.default(x = x, y = y, type = "one-classification")
Parameters:
SVM-Type: one-classification
SVM-Kernel: radial
gamma: 0.25
nu: 0.5
Number of Support Vectors: 27
Number of Classes: 1
-Predictions(由於視覺原因,此處僅顯示了一些預測(其中Species =='setosa')):
> pred
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
45 46 47 48 49 50
FALSE TRUE TRUE TRUE TRUE TRUE
精確編寫一些代碼: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) # confusionMatrixTable<-table(Predicted=svm.pred,Reference=testLabels) # confusionMatrix(confusionMatrixTable,positive='TRUE') confTrain<-table(Predicted=svm.predtrain,Reference=trainLabels) confTest<-table(Predicted=svm.predtest,Reference=testLabels) confusionMatrix(confTest,positive='TRUE') print(confTrain) print(confTest)
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) # confusionMatrixTable<-table(Predicted=svm.pred,Reference=testLabels) # confusionMatrix(confusionMatrixTable,positive='TRUE') confTrain<-table(Predicted=svm.predtrain,Reference=trainLabels) confTest<-table(Predicted=svm.predtest,Reference=testLabels) confusionMatrix(confTest,positive='TRUE') print(confTrain) print(confTest)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.