R语言svm支持向量机分类与参数优化

R语⾔svm⽀持向量机分类与参数优化
⾸先构建数据集
x<-c(runif(50,0,1),runif(100,1,3),runif(50,3,4))
y<-runif(200,0,1)
z<-c(rep(0,50),rep(1,100),rep(0,50))
data<-cbind(x,y,z)
画出数据集的情况
plot(x,y,col=c(rep('red',50),rep('blue',100),rep('red',50)))
构建⽀持向量机
library(e1071)
svm.fit<-svm(z~x+y,data=data)
summary(svm.fit)
爱美说>###
Call:
svm(formula = z ~ x + y, data = data)
Parameters:
SVM-Type:  eps-regression三峡船闸
SVM-Kernel:  radial
cost:  1
gamma:  0.5
epsilon:  0.1
Number of Support Vectors:  158
>####
SVM-Kernel:  radial表⽰此处使⽤的核函数为radial核函数,即径向基核函数,这是⼀个基于样本点之间的距离决定映射⽅式的函数。
Number of Support Vectors:  158 表⽰在这个模型中⽀持向量的数⽬是158
查看分类结果
predict(svm.fit)
预测值为正说明模型判断样本点属于类别1,为负说明属于类别0,且数值绝对值越⼤说明预测可靠性越⼤
svm.pre<-ifelse(predict(svm.fit)>0,1,0)
n<-ifelse(svm.pre==z,1,0)
sum(n)
[1] 131
宁资理131个分类正确,正确率为65.5%
col<-ifelse(svm.pre==0,'red','blue')
plot(x,y,col=col)
分类图像
下⾯尝试使⽤其他的核函数来分类
1.线性核函数
svm.line<-svm(z~x+y,data=data,kernel='linear')
svm.linepre<-ifelse(predict(svm.line)>0,1,0)
n<-ifelse(svm.linepre==z,1,0)
sum(n)
[1] 100
col<-ifelse(svm.linepre==0,'red','blue')
plot(x,y,col=col)
使⽤线性核函数的分类结果正确率是50%,⽽且把全部样本点判断为类别1
2.kernel设置为polynomial使⽤多项式核函数,结果与线性核函数⼀样
这是因为线性核函数和多项式核函数擅长解决线性分类,径向基核函数擅长解决⾮线性分类
3.同理可以试⼀下s型核函数,其正确率为56.5%,其分类结果散点图呈现倾斜带状,因为s 型核函数对样本数据呈现带状规律过分敏感。实际上,他是神经⽹络核函数的⾸选。
⽀持向量机中⽐较重要的参数有三个:degree,cost,gamma
1.degree是仅⽤于多项式核函数中的参数,代表多项式核函数的次数,在本例中,经过实践发现degree为奇数瓜绢野螟
时,degree越⼤模型表现越好,为偶数时,degree越⼤,模型越差,当degree⾜够⼤时,模型准确率趋于稳定。另外,当degree⾼于15时,R出现警告信息,⽽且当样本数据量较⼤时,设置过⾼的degree将⾮常危险(书上说的,我是想象不出来有什么危险)
3.gamma是选择径向基核函数作为kernel后,该函数⾃带的⼀个参数。隐含地决定了数据映射到新的特征空间后的分
长春职业技术学院沈布,gamma越⼤,⽀持向量越少,gamma值越⼩,⽀持向量越多。⽀持向量的个数影响训练与预测的速度。本例也选取了1~20来测试,随着gamma的增加,准确度先增加后减⼩,在3处取最⼤值。
下⾯我们⽤穷举法来确定本例的最佳参数组合
a<-c()
for(i in 1:10){
for(j in 1:10){
for(k in 1:10){
svm.fit<-svm(z~x+y,data=data,degree=i,cost=j,gamma=k)
svm.pre<-ifelse(predict(svm.fit)>0,1,0)
n<-ifelse(svm.pre==z,1,0)
result<-c(i,j,k,sum(n))
a<-rbind(a,result)
HOPLOBATRACHUS RUGULOSUS}}}
a[which(a[,4]==max(a[,4])),]
结果如下
[,1] [,2] [,3] [,4]
result    1    7    3  147
result    2    7    3  147
result    3    7    3  147
result    4    7    3  147
result    5    7    3  147
result    6    7    3  147
result    7    7    3  147
result    8    7    3  147
result    9    7    3  147
result  10    7    3  147
显然,degree的变化不影响径向基核函数的结果,所以最佳参数为cost=7,gamma=3,模型准确率可以达到73.5%

本文发布于:2024-09-22 05:38:28,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/570033.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   分类   样本   结果   径向   模型   基核   本例
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议