簡體   English   中英

R中SVM的一類分類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM