#支持向量机预测问题代码
install.packages("e1071") #下载包
library(e1071) #加载包
attach(iris) #以iris数据为例
x=subset(iris,select=-Species) #subset从数据集取子集,第一个参数表示数据源,select选择属性
y=Species
svm1=svm(Species~.,data=iris) #品种是因变量,其它所有变量对因变量做支持向量机回归
summary(svm1) #结果摘要
svm1$labels #查看类别标签
pred=predict(svm1,x) #预测结果
table(pred,y) #预测结果和真实结果混淆矩阵
plot(svm1,iris,Petal.Width~Petal.Length,slice = list(Sepal.Width=2,Sepal.Length=4)) #iris包括四个属性,在二维图形中需要指定其余二维,才能显示区域边界
#支持向量机对参数非常敏感,下面以radial核函数、损失系数2以及核函数参数0.8训练一个新的分类器,
#损失系数表明了分类器对错误分类的容忍度,损失系数越大,表面该分类模型越不能容忍错误分类,
#对应的误差就越小,但在线性不可分模型中容易造成过拟合的情况
svm2=svm(Species~.,data = iris,kernel="radial",cost=2,gamma=0.8)
summary(svm2)
pred=predict(svm2,x)
table(pred,y) #只有一例分错类,进一步检验结果,按80%和20%比例分为训练集和测试集检验
set.seed(2019) #随机种子
index2=sample(x=2,size=nrow(iris),replace=TRUE,prob=c(0.8,0.2)) #按照80%和20%比例划分训练集和测试集
train2=iris[index2==1,] #训练集
test2=iris[index2==2,] #测试集
iris.svm=svm(Species~.,data = train2,kernel="radial",cost=2,gamma=0.8)
pred2=predict(iris.svm,test2) #用测试集检验效果
table(pred2,test2$Species) #混淆矩阵
软件结果展示
> library(e1071) #加载包
> attach(iris)
> x=subset(iris,select=-Species)
> y=Species
> svm1=svm(Species~.,data=iris) #品种是因变量,其它所有变量对因变量做支持向量机回归
> summary(svm1) #结果摘要
Call:
svm(formula = Species ~ ., data = iris)
Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 1
gamma: 0.25
Number of Support Vectors: 51
( 8 22 21 )
Number of Classes: 3
Levels:
setosa versicolor virginica
> svm1$labels
[1] 1 2 3
> pred=predict(svm1,x)
> table(pred,y)
y
pred setosa versicolor virginica
setosa 50 0 0
versicolor 0 48 2
virginica 0 2 48
> plot(svm1,iris,Petal.Width~Petal.Length,slice = list(Sepal.Width=2,Sepal.Length=4)) #iris包括四个属性,在二维图形中需要指定其余二维,才能显示区域边界
> #支持向量机对参数非常敏感,下面以radial核函数、损失系数2以及核函数参数0.8训练一个新的分类器,
> #损失系数表明了分类器对错误分类的容忍度,损失系数越大,表面该分类模型越不能容忍错误分类,
> #对应的误差就越小,但在线性不可分模型中容易造成过拟合的情况
> svm2=svm(Species~.,data = iris,kernel="radial",cost=2,gamma=0.8)
> summary(svm2)
Call:
svm(formula = Species ~ ., data = iris, kernel = "radial",
cost = 2, gamma = 0.8)
Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 2
gamma: 0.8
Number of Support Vectors: 56
( 12 22 22 )
Number of Classes: 3
Levels:
setosa versicolor virginica
> pred=predict(svm2,x)
> table(pred,y)
y
pred setosa versicolor virginica
setosa 50 0 0
versicolor 0 49 0
virginica 0 1 50
> index2=sample(x=2,size=nrow(iris),replace=TRUE,prob=c(0.8,0.2)) #按照80%和20%比例划分训练集和测试集
> train2=iris[index2==1,]
> test2=iris[index2==2,] #测试集
> iris.svm=svm(Species~.,data = train2,kernel="radial",cost=2,gamma=0.8)
> pred2=predict(iris.svm,test2)
> table(pred2,test2$Species)
pred2 setosa versicolor virginica
setosa 4 0 0
versicolor 0 8 1
virginica 1 0 11