1. 程式人生 > >【ML--14】在R語言中使用SVM演算法做多分類預測

【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
>