1.什麼是隨機森林
顧名思義,是用隨機的方式創建一個森林,森林裏面有不少的決策樹組成,隨機森林的每一棵決 策樹之間是沒有關聯的。在獲得森林以後,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬於哪一類(對於分類算法),而後看看哪一 類被選擇最多,就預測這個樣本爲那一類。
咱們能夠這樣比喻隨機森林算法:每一棵決策樹就是一個精通於某一個窄領域的專家(由於咱們 從M個特徵中選擇m個讓每一棵決策樹進行行學習),這樣在隨機森林中就有了了不少個精通不不同領 域的專家,對一個新的問題(新的輸入數據),能夠用不不同的角度去看待它,最終由各個專家, 投票獲得結果算法
2.Bootstraping(隨機且有放回地抽取)
Leo Breiman於1994年提出的Bagging(又稱Bootstrap aggregation,引導彙集)是最基本的集成技術之一。Bagging基於統計學中的bootstraping(自助法),該方法使得評估許多複雜模型的統計數據更可行。
2.1bootstrap方法的流程以下:假設有尺寸爲N的樣本X。咱們能夠從該樣本中有放回地隨機均勻抽取N個樣本,以建立一個新樣本。換句話說,咱們從尺寸爲N的原樣本中隨機選擇一個元素,並重復此過程N次。選中全部元素的可能性是同樣的,所以每一個元素被抽中的機率均爲1/N。
2.2假設咱們從一個袋子中抽球,每次抽一個。在每一步中,將選中的球放回袋子,這樣下一次抽取是等機率的,即,從一樣數量的N個球中抽取。注意,由於咱們把球放回了,新樣本中可能有重複的球。讓咱們把這個新樣本稱爲X1。
重複這一過程M次,咱們建立M個bootstrap樣本X1,……,XM。最後,咱們有了足夠數量的樣本,能夠計算原始分佈的多種統計數據。bootstrap
3. Baggingapi
理解了bootstrap概念以後,咱們來介紹bagging。
假設咱們有一個訓練集X。咱們使用bootstrap生成樣本X1, …, XM。如今,咱們在每一個bootstrap樣本上分別訓練分類器ai(x)。最終分類器將對全部這些單獨的分類器的輸出取均值。在分類情形下,該技術對應投票(voting):
學習
4.袋外偏差(OOBE)
咱們知道,在構建每棵樹時,咱們對訓練集使用了不一樣的bootstrap sample(隨機且有放回地抽取)。因此對於每棵樹而言(假設對於第k棵樹),大約有1/3的訓練實例沒有參與第k棵樹的生成,它們稱爲第k棵樹的oob樣本。
而這樣的採樣特色就容許咱們進行oob估計,它的計算方式以下:
1對每一個樣本,計算它做爲oob樣本的樹對它的分類狀況(約1/3的樹);
2而後以簡單多數投票做爲該樣本的分類結果;
3最後用誤分個數佔樣本總數的比率做爲隨機森林的oob誤分率。測試
示意圖上方爲原始數據集。咱們將其分爲訓練集(左)和測試集(右)。在測試集上,咱們繪製一副網格,完美地實施了分類。如今,咱們應用同一副網格於測試集,以估計分類的正確率。咱們能夠看到,分類器在4個不曾在訓練中使用的數據點上給出了錯誤的答案。而測試集中共有15個數據點,這15個數據點未在訓練中使用。所以,咱們的分類器的精確度爲11/15 * 100% = 73.33%.blog
總結一下,每一個基礎算法在約63%的原始樣本上訓練。該算法能夠在剩下的約37%的樣本上驗證。袋外估計不過是基礎算法在訓練過程當中留置出來的約37%的輸入上的平均估計。io
5.隨機森林流程
5.1設樣本數等於n,特徵維度數等於d。
5.2選擇集成中單個模型的數目M。
5.3對於每一個模型m,選擇特徵數dm < d。全部模型使用相同的dm值。
5.4對每一個模型m,經過在整個d特徵集合上隨機選擇dm個特徵建立一個訓練集。
5.5訓練每一個模型。
5.6經過組合M中的全部模型的結果,應用所得集成模型於新輸入。基礎