隨機森林是一包含多個決策樹的分類器,也就是多個樹狀分類器的集合。
詳細介紹可以參考維基百科
https://zh.wikipedia.org/wiki/%E9%9A%8F%E6%9C%BA%E6%A3%AE%E6%9E%97
本篇使用之資料集:
- 資料集:UCI Machine Learning Repository,Student Performance Data Set的student-mat.csv檔案
- 簡 述:總共有359位學生的資料,每位學生有33個屬性(如:學校、性別、年齡......等)。利用每位學生的32個屬性,來預測其最終數學成績(G3)。
程式碼如下:
第24行印出
第27行印出
(即為90%的訓練資料筆數,395*90%=355.5,取天花板數為356沒錯~)
第30行印出隨機選出的訓練資料(共356筆)中,隨機選到第幾筆資料
第41行印出
以OOB樣本進行預測,錯誤率為28.65%
(OOB為Out of bag error的意思,為每次抽樣中的袋外資料)
下面的矩陣可以看出
模型將原本為A的正確預測為A的有21筆
模型將原本為A的錯誤預測為B的有12筆
A類別的誤判率有38.2%
然而,在隨機森林中有兩個重要的參數,
一個為ntree,即為森林的樹木數;
另一個為mtry,即為每顆決策樹之節點分支以隨機方式選擇屬性之個數。
下面的程式碼試圖找出對於決策樹節點分支所選擇的屬性個數之最佳值(mtry)。
第35~40行的for迴圈中,加入所選的屬性個數,並印出該模型的錯誤率平均值,
第1個模型為:決策樹之節點分支屬性個數為1時
第22個模型為:決策樹之節點分支屬性個數為22時
依此類推......
找出錯誤率最小的模型,
該模型的屬性個數值即為mtry最佳的參數值。
執行第41~42行
第46行
把mtry參數設定為26後(第44行),
以OOB樣本進行預測,錯誤率為24.3%
第47行
利用importance()函數來找出重要的屬性
第50行
以round()函數來簡化,四捨五入取到小數第二位
利用importance()函數,得到MeanDecreaseAccuracy與MeanDecreaseGini,
值愈高就表示該屬性對於該模型的判別影響愈大,
可以做為後續利用其他演算法建模時刪減屬性的依據。
第49行
利用MDSplot()函數印出集群分析圖
參考:
Poll的筆記,http://www.cnblogs.com/maybe2030/p/4585705.html
林淑芬(臺灣大學計算機及資訊網路中心教學研究組程式設計師),http://www.cc.ntu.edu.tw/chinese/epaper/0034/20150920_3410.html
易百教程 , R语言随机森林 ,http://www.yiibai.com/r/r_random_forest.html
請不吝指教 =)
留言列表