【ML--14】在R语言中使用SVM算法做多分类预测

我们采用iris数据集进行学习和测试,最后看看它的效果。
1、载入SVM算法包

library(e1071)

2、划分训练和测试集

划分训练和测试集时,采用set.seed函数设随机数种子,这能保证划分得到的训练和测试集与C5.0完全相同,方便后续测试效果的比较。

set.seed(2016)
train.indeces<-sample(1:nrow(iris),100)
iris.train<-iris[train.indeces,]
iris.test<-iris[-train.indeces,]

3、建立SVM模型

采用svm函数基于训练集iris.train建立SVM模型:
model<-svm(formula=Species~.,data=iris.train)
svm函数参数:
formula:模型的方程
data:训练集

4、 测试数据

采用测试数据集iris.test进行测试:
results<-predict(object=model,newdata=iris.test,type=”class”)
采用predict泛型函数进行预测:
object:svm类的模型对象
newdata:测试集
type:预测类型,type = “class”返回所属的类,type = “prob”返回概率值

5、查看预测效果
res<-table(results,iris.test$Species)
res

6、完整代码


rm(list=ls())
gc()
options(scipen = 200)
library(e1071)

iris <- iris
##########划分训练和测试集#################
set.seed(2016)
train.indeces<-sample(1:nrow(iris),100)
iris.train<-iris[train.indeces,]
iris.test<-iris[-train.indeces,]


########采用svm函数基于训练集iris.train建立SVM模型:
model<-svm(formula=Species~.,data=iris.train)

results_train<-predict(object=model,newdata=iris.train,type="class")

#打印混淆矩阵
(res_train<-table(results_train,iris.train$Species))

##准确率
(accurary<-sum(diag(res_train))/sum(res_train))



#############用测试数据集预测#####################
results_test<-predict(object=model,newdata=iris.test,type="class")
(res_test<-table(results_test,iris.test$Species))

##准确率
(accurary<-sum(diag(res_test))/sum(res_test))

7、运行结果

> rm(list=ls())
> gc()
          used (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 1591792 85.1    2637877 140.9  2637877 140.9
Vcells 2765843 21.2    5208873  39.8  5208842  39.8
> options(scipen = 200)
> library(e1071)
> 
> iris <- iris
> ##########划分训练和测试集#################
> set.seed(2016)
> train.indeces<-sample(1:nrow(iris),100)
> iris.train<-iris[train.indeces,]
> iris.test<-iris[-train.indeces,]
> 
> 
> ########采用svm函数基于训练集iris.train建立SVM模型:
> model<-svm(formula=Species~.,data=iris.train)
> 
> results_train<-predict(object=model,newdata=iris.train,type="class")
> 
> #打印混淆矩阵
> (res_train<-table(results_train,iris.train$Species))

results_train setosa versicolor virginica
   setosa         38          0         0
   versicolor      0         31         1
   virginica       0          1        29
> 
> ##准确率
> (accurary<-sum(diag(res_train))/sum(res_train))
[1] 0.98
> 
> 
> 
> #############用测试数据集预测#####################
> results_test<-predict(object=model,newdata=iris.test,type="class")
> (res_test<-table(results_test,iris.test$Species))

results_test setosa versicolor virginica
  setosa         12          0         0
  versicolor      0         18         2
  virginica       0          0        18
> 
> ##准确率
> (accurary<-sum(diag(res_test))/sum(res_test))
[1] 0.96
> 
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页