R 实现 支持向量机 support vector machine

举报
the-order 发表于 2022/04/08 12:43:34 2022/04/08
【摘要】 R 实现 支持向量机 support vector machine

@[TOC](R 实现 支持向量机 support vector machine)

1 工具准备

R中有直接写好的包,可以直接使用

install.packages("e1071")
library(e1071)

2 划分样本

对训练集和测试集进行划分

index=sample(1:nrow(iris),100)
train=iris[index,]
test=iris[-index,]

3 模型建立

用工具包中的方法建立模型

model1=svm(Species~.,data=train,kernel="linear")
model1

summary(model1)
p1=predict(model1,test)
table(test$Species,p1)

在这里插入图片描述

4 交叉验证

cross参数是交叉验证比例

#num-fold cross validation
model2=svm(Species~.,data=train,kernel="linear",cross=7)
summary(model2)

在这里插入图片描述

5 软间隔选择

cost是划分软间隔的距离

model3=svm(Species~.,data=train,kernel="linear",cross=5,cost=50)
model3$accuracies
model3$tot.accuracy

在这里插入图片描述
编写软间隔方法,直接使用软间隔

acc=function(cost){
  model=svm(Species~.,data=train,kernel="linear",cross=5,cost=cost)
  p=predict(model,test)
  A=as.matrix(table(test$Species,p))
  acc=(sum(diag(A))/sum(A))
  return(acc)
}
acc(10)

在这里插入图片描述

创建等差数列选择最优软间隔

C=seq(0.01,100,length=100)
Acc=NULL
for (i in 1:length(C)) {
  model=svm(Species~.,data=train,kernel="linear",cross=5,cost=C[i])
  p=predict(model,test)
  A=as.matrix(table(test$Species,p))
  Acc[i]=(sum(diag(A))/sum(A))
}
Acc
which(Acc==max(Acc))
plot(C,Acc)

在这里插入图片描述
在这里插入图片描述

6 非线性核函数参数

使用gamma参数调整核函数

#kernel function
model4=model3=svm(Species~.,data=train,kernel="radial",cross=5,cost=5,gamma=0.1)
summary(model4)

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。