Ví dụ cho một lớp SVM trong R


8

Tôi đang cố gắng thực hiện SVM một lớp trong R. Tôi đã cố gắng sử dụng gói kernlab e1071 / ksvm. Nhưng tôi không chắc là tôi đang làm đúng hay không.

Có ví dụ làm việc nào cho SVM một lớp trong R không?

Cũng thế,

  • Tôi đang đưa ra một ma trận lớn của các yếu tố dự đoán là X. Vì nó được coi là một lớp, có phải là giả định rằng tất cả dữ liệu đào tạo tôi đã đưa ra lớp 'dương'? Nếu vậy, chúng ta không phải đưa ra nhãn 'Y'?
  • Các nhãn dự đoán được đưa ra là đầu ra là Đúng / Sai. Vì vậy, tôi giả sử, True là lớp 'tích cực'.

Chỉnh sửa: Đính kèm mã mẫu. Ở đây tôi đã lấy mẫu 60% lớp 'TRUE' và tôi đã thử nghiệm trên bộ dữ liệu đầy đủ.

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
Giả định của bạn là chính xác. Tuy nhiên, sẽ dễ dàng hơn nhiều để giúp bạn nếu bạn cung cấp một số mã.
Marc Claesen

Cảm ơn Joel cho bài đăng này, tuy nhiên khi áp dụng mã này, nó mang lại cho tôi độ chính xác rất thấp so với khi sử dụng hai lớp mehtods. Điều này có đúng không? Tôi hiện đang so sánh cả hai phương pháp để chọn phương pháp nào sẽ sử dụng; đặc biệt trong trường hợp của tôi không có dữ liệu về sự vắng mặt (lớp khác) và tôi hiện đang so sánh phương thức 1 lớp với 2 phương thức lớp (với sự vắng mặt giả). Bất kỳ trợ giúp về vấn đề này sẽ được đánh giá cao, Trân trọng.
Ahmed El-Gabbas

Chỉnh sạch lỗi mã trên là để dòng inTrain: inTrain <-as.numeric (rownames (trainPositive)) [createDataPartition (1: nrow (trainPositive), p = 0,6, list = FALSE)]
enfascination

Câu trả lời:



2

Tôi đang cung cấp phiên bản chính xác của mã trên. Lựa chọn 'giảng viên' của bạn là sai vì bạn đã chọn từ iris thay vì 'trainPositive' nhưng chỉ số bạn được chọn từ 'trainPositive'. Độ chính xác: tàu = 78.125 kiểm tra = 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.