【ML--14】在R語言中使用SVM演算法做多分類預測
阿新 • • 發佈:2018-12-31
我們採用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
>