我们采用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
>