我一直在使用R Studio开发支持向量机算法。但是,我最终的准确率很低,而且我不知道如何修复它。我期待准确率高于90%。
这是我的代码:
install.packages("caTools")
install.packages("class")
library(caTools)
library(class)
install.packages("ISLR")
library(ISLR)
Collegedata<-College[,-1]
Collegedata[,-17]<-scale(Collegedata[,-17])
med<-median(Collegedata$Grad.Rate)
Grad.Rate<-Collegedata$Grad.Rate>=med
Grad.Rate1<-as.numeric(Grad.Rate)
Collegedata<-data.frame(Collegedata,Grad.Rate1)
corcollege<-cor(Collegedata)
Collegedata<-Collegedata[,-2:-3]
Collegedata<-Collegedata[,-4]
Collegedata<-Collegedata[,-7]
Collegedata<-Collegedata[,-13]
SVM
install.packages("e1071")
library("e1071")
collegesplit=sample.split(Collegedata, SplitRatio=0.8)
collegetrain<-subset(Collegedata, collegesplit==1)
collegetest<-subset(Collegedata, collegesplit==0)
collegetrain<-data.frame(collegetrain)
svm.model.college <- svm(Grad.Rate1 ~ ., data = collegetrain, type = "C-classification", cost = 1,gamma = 0.125, cross =10)
svm.pred.college <- predict(svm.model.college, collegetest[,-13])
table(pred = svm.pred.college, true = collegetest[,13])
install.packages('ROCR')
library(ROCR)
ROC=predict(svm.model.college,newdata=collegetest)
ROC<-as.vector(ROC)
ROC<-as.numeric(ROC)
pred=prediction(ROC,collegetest$Grad.Rate1)
perf=performance(pred,'tpr','fpr')
plot(perf)
as.numeric(performance(pred,'auc')@y.values)
答案 0 :(得分:0)
自从我编写SVM以来已经有一段时间了,所以我无法为您提供任何代码,但是,我可以说SVM对您选择的超参数非常敏感,例如:成本和伽玛。您希望对某些值序列执行网格搜索以确定最佳值。我建议使用e1071包中的tune.svm()或best.tune()函数来执行此操作。此外,虽然默认的高斯内核通常是最佳内核,但不能保证它是最好的,所以你可以尝试使用线性内核。
您可能会发现this paper对于帮助开发构建模型的框架非常有用。