R语言 支持向量机分类预测

#支持向量机预测问题代码

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包括四个属性,在二维图形中需要指定其余二维,才能显示区域边界

R语言 支持向量机分类预测

> #支持向量机对参数非常敏感,下面以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