1. 程式人生 > >隨機森林--簡單示例

隨機森林--簡單示例

隨機森林屬於模式識別中有監督的分類中的一種方法。它的原理是以決策樹為基本分類器的一個整合學習模型,它包含多個由Bagging整合學習技術訓練得到的決策樹,當輸入待分類的樣本時,最終的分類結果由決策樹的輸出結果的眾數決定。

一、基本原理列出如下:

  1. 從原始資料m*n維資料中有放回的抽取樣本容量與原資料相同的資料樣本m*n,樣本數量為ntree(在R語言中可以指定);

  2. 對每一個數據樣本應用決策樹的計算方法(但並不全部應用),即從資料的n維特徵中無放回的隨機抽取mtry維特徵(在R語言中可以指定)。以隨機色林的分類功能為例,通過mtry維特徵中,通過計算資訊增益的方式找到分類效果最好的一維特徵k,及其閾值th,小於th的樣本劃分到左節點,其餘的劃分到右節點,繼續訓練其他節點。

  3. 重複訓練所有的資料樣本,得到ntree個決策樹

  4. 隨機森林便是ntree個決策樹集合起來的森林,當預測結果時,所有的決策樹對預測集一一進行分類,得到其分類結果,統計票數得到結果。

注:

  1. 要想對隨機森林進行細節及方法上的理解,還希望讀者自己查詢相關文獻。

  2. 筆者以為,如果能夠明白決策樹的演算法及原理,對隨機森林的理解能夠加深。

  3. 關於資訊增益,這裡提供一種比較簡單但不科學的方法,我們都知道“熵”這個詞,它表徵物質狀態的參量之一,越大物質狀態越混亂。於是,在資訊學中有了“資訊熵”這個名詞,可以理解為資訊的混亂程度,那麼資訊增益可以理解為資訊在分類前與分類後的差值,繼而能夠知道資訊熵減少的越多,資訊的混亂程度越低,那麼分類效果也就比較好。實際上這個分類方法也有其侷限性,現在的分類方法還有很多。

  4. 最後,重中之重,上述原理以及提供的理解方法,是筆者自己的理解,並且原理表述並不嚴謹和標準,具體參見維基百科上對隨機森林的表述,如有錯誤之處還請廣大讀者批評指正!

好啦!介紹到此為止,貌似有點多,下面進入演示階段。

二、示例

資料為R自帶的資料集iris,該資料集包含了150個樣本,5個變數,記錄了鳶尾屬植物的萼片、花瓣的長度和寬度,三個物種,每個物種50株植物,下面我們用隨機森林方法通過植物的萼片、花瓣的長度和寬度來對150個樣本根據其物種進行分類。


1.函式介紹

randomForest(formula, data, mtry, ntree)


注:mtry的取值是建立隨機森林方法的作者的建議。

2.操作步驟如下:



注:1. OOB錯誤率即袋外資料錯誤率,如何產生的呢?我們在隨機森林模型的原理中提到“從原始資料m*n維資料中有放回的抽取樣本容量與原資料相同的資料樣本m*n”,既然是有放回的抽取,則必然有未抽取到的樣本,那麼這部分資料就是袋外資料,在每個決策樹形成後,這部分被用於驗證決策樹的正確率,再將所有的決策樹的OOB錯誤率平均即得到模型的OOB錯誤率。

到這裡一個隨機森林模型便建好了,當然randomForest包的功能可不到這裡為止,你可以看到在建好的模型中,變數的相對重要性,即importance()函式,它以MeanDecreaseAccuracy為指標評價變數的重要性,基本原理可以理解為它在原有的模型的基礎上將某個變數進行隨機賦值,預測的誤差的變化即是變數的重要性。

3. importance()函式

這裡展示importance()函式。

拓展延伸:

  1. randomForest包中集合了眾多具有強大功能的函式,如tuneRF()函式可以調節mtry值、varImpPlot()函式可以將變數的相對重要性做成圖示以方便比較、varUsed可以顯示統計隨機森林模型中使用到的變數的次數。

  2. 關於隨機森林模型,這裡列出些筆者參考的網頁及資源,有興趣的讀者可以點選檢視。

我愛機器學習網站:http://www.52ml.net/該網站介紹了很多機器學習的和理論,對筆者的幫助很大。

一篇文獻:《隨機森林理論淺析》,董師師,黃哲學。這篇文獻將森林中的幾個定理進行了證明,有興趣的讀者可以尋找檢視。

關於隨機森林的介紹就到這裡,這是筆者自己學習的一點心得,在此分享,如有錯誤之處還請廣大讀者批評指正!

來源:R語言中文論壇。