1. 程式人生 > >Bagging演算法的R語言實現

Bagging演算法的R語言實現

原始連結 http://www.tuicool.com/articles/yIjyiu

bagging 是bootstrap aggregating的縮寫,是第一批用於多分類整合演算法。

bagging演算法如下: 

迴圈K次,每次都從樣本集D中有放回地抽取樣本集Di,這樣總共得到k個樣本集,用這K個樣本集進行決策樹生成,獲得K個決策樹模型,再將要檢測的資料用這K個決策樹模型進行多數表決,獲得票數多的結論。

這種思想跟現代民主投票制度如出一轍,一個人再厲害,判斷力也是有限的,但是把一群人聚合在一起投票,那單個人所犯錯誤的概率就會被抵消,最後得出結論的正確性會明顯優於單個人做出決策。

個人認為其演算法倒是並不複雜,主要還是內部決策樹的實現。R語言提供了很強大的包實現該演算法。R語言中用於bagging演算法實現的是ipred包。

1、首先安裝ipred包。這個不復雜,就不介紹了(如果這個不會,還是先從頭開始學習R吧)

2、谷歌的結果好像不是很理想,所以 安裝完之後還是檢視下幫助文件吧。  命令:help(package("ipred"),找到bagging函式的使用

3、可以看到bagging函式有多種呼叫方式

## S3 method for class 'factor'
ipredbagg(y, X=NULL, nbagg=25, control=
rpart.control(minsplit=2, cp=0, xval=0), 
comb=NULL, coob=FALSE, ns=length(y), keepX
= TRUE, ...) ## S3 method for class 'numeric' ipredbagg(y, X=NULL, nbagg=25, control=rpart.control(xval=0), comb=NULL, coob=FALSE, ns=length(y), keepX = TRUE, ...) ## S3 method for class 'Surv' ipredbagg(y, X=NULL, nbagg=25, control=rpart.control(xval=0), comb=NULL, coob=FALSE, ns=dim
(y)[1], keepX = TRUE, ...) ## S3 method for class 'data.frame' bagging(formula, data, subset, na.action=na.rpart, ...)

由於本示例使用的是iris資料集,顯然對應最後一種呼叫方式。

formula是資料模型,我們這邊應變數是Species,所以資料模型就是Species~.了。

data就是所需資料集,這裡是鳶尾花資料集iris

subset寫著是可選引數(我也沒看明白是啥引數,囧)

na.action=na.rpart  這個應該是指遇到空值或者異常值的處理辦法,預設是rpart。想來也不用管那麼多了

好了,呼叫下看看


model.bagging <- bagging(Species~.,data=iris) 這句就是根據語法說明寫的,後面兩句一般照抄就可以了,具體含義不在這裡解釋。

最終輸出的是表格形式的,縱向表示三種花種的真實屬類,橫向表示採用決策樹之後的預測屬類。可以看到100%分類正確。

下圖是用CART樹做的預測結果,可以看到versicolor有5個歸類錯誤,virginica一個歸類錯誤,bagging完勝單獨決策樹