引言 算法
隨機森林在機器學習實戰中沒有講到,我是從伯克利大學的一個叫breiman的主頁中看到相關的資料,這個breiman好像是隨機森林算法的提出者,網址以下 bootstrap
http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm dom
隨機森林算法簡介 機器學習
隨機森林說白了就是不少個決策樹組成在一塊兒,就造成了森林,關鍵在於如何建立森林裏的每一棵樹,隨機森林用到的方法bootstrap法,通俗的講就是有放回的抽取樣本 性能
這裏有個理論依據在這,說明有放回的抽取方法大概有三分之一的樣本不會被抽取到,在此我簡單說一下這個緣由 學習
三分之一的樣本不會被抽取到的緣由 測試
當N足夠大時, 將收斂於1/e≈0.368,這代表原始樣本集D中接近37%的樣本不會出如今bootstrap樣本中,這些數據稱爲袋外(Out-Of-Bag,OOB)數據,使用這些數據來估計模型的性能稱爲OOB估計 spa
構建決策樹 rest
除了隨機抽取樣本外,構建一個決策樹還須要隨機抽取樣本的特徵,好比樣本總共有100維特徵,咱們隨機抽取其中的10維特徵構建決策樹 htm
若是咱們想構建200棵決策樹的隨機森林,咱們就要這樣隨機抽取200次,每次抽取10維特徵構建一個決策樹
而用於構建決策樹的樣本也須要用以前說的那種bootstrap法有放回的隨機抽取,簡單說一下用於構建一個決策樹的樣本集生成的過程
bootstrap法抽取樣本過程
隨機抽取1個樣本,而後讓回,而後再隨機抽取1個樣本,這樣抽取N次,能夠獲得N個樣本的數據集,用這N個樣本的數據集,按照以前隨機選取的10維特徵,遍歷這10維特徵,對數據集進行劃分,獲得一棵決策樹
若是要構建200棵樹,就須要隨機抽取200次10維特徵,隨機抽取200次N個樣本集
隨機森林分類
獲得了200棵樹的隨機森林如何用做分類呢,隨機森林中用的OOB數據測試隨機森林的分類結果,以前說到bootstrap方法會形成大概三分之一的數據不會被採樣的,這部分數據就被稱之爲OOB數據,將這部分數據放入森林中,每一棵樹會對相應的數據獲得一個分類結果,那麼最後的結果會根據投票來肯定
爲何不用交叉驗證的方法二用OOB的方法
有一個問題就是這種OOB的方法跟交叉驗證中隨機抽取樣本有什麼區別,好比十折交叉驗證中就是把數據集平均分爲10份兒,隨機選取其中的9份兒用做訓練,1份兒用做測試,重複十次,取平均值,那麼OOB這種有放回的重採樣,和交叉驗證有什麼區別呢
一個很重要的區別根據做者的說法在於計算量,用交叉驗證(CV)估計組合分類器的泛化偏差時,可能致使很大的計算量,從而下降算法的運行效率,而採用OOB數據估計組合分類器的泛化偏差時,能夠在構建各決策樹的同時計算出OOB誤
差率,最終只需增長少許的計算就能夠獲得。相對於交叉驗證,00B估計是高效的,且其結果近似於交叉驗證的結果