隨機森林--你想到的,都在這了。
1.什麼是隨機森林
1.1 Bagging思想
Bagging是bootstrap aggregating。思想就是從總體樣本當中隨機取一部分樣本進行訓練,通過多次這樣的結果,進行投票獲取平均值作為結果輸出,這就極大可能的避免了不好的樣本資料,從而提高準確度。因為有些是不好的樣本,相當於噪聲,模型學入噪聲後會使準確度不高。
舉個例子:
假設有1000個樣本,如果按照以前的思維,是直接把這1000個樣本拿來訓練,但現在不一樣,先抽取800個樣本來進行訓練,假如噪聲點是這800個樣本以外的樣本點,就很有效的避開了。重複以上操作,提高模型輸出的平均值。
1.2 隨機森林
Random Forest(隨機森林)是一種基於樹模型的Bagging的優化版本,一棵樹的生成肯定還是不如多棵樹,因此就有了隨機森林,解決決策樹泛化能力弱的特點。(可以理解成三個臭皮匠頂過諸葛亮)
而同一批資料,用同樣的演算法只能產生一棵樹,這時Bagging策略可以幫助我們產生不同的資料集。Bagging策略來源於bootstrap aggregation:從樣本集(假設樣本集N個數據點)中重取樣選出Nb個樣本(有放回的取樣,樣本資料點個數仍然不變為N),在所有樣本上,對這n個樣本建立分類器(ID3\C4.5\CART\SVM\LOGISTIC),重複以上兩步m次,獲得m個分類器,最後根據這m個分類器的投票結果,決定資料屬於哪一類。
每棵樹的按照如下規則生成:
- 如果訓練集大小為N,對於每棵樹而言,隨機且有放回地從訓練集中的抽取N個訓練樣本,作為該樹的訓練集;
- 如果每個樣本的特徵維度為M,指定一個常數m<<M,隨機地從M個特徵中選取m個特徵子集,每次樹進行分裂時,從這m個特徵中選擇最優的;
- 每棵樹都盡最大程度的生長,並且沒有剪枝過程。
一開始我們提到的隨機森林中的“隨機”就是指的這裡的兩個隨機性。兩個隨機性的引入對隨機森林的分類效能至關重要。由於它們的引入,使得隨機森林不容易陷入過擬合,並且具有很好得抗噪能力(比如:對預設值不敏感)。
總的來說就是隨機選擇樣本數,隨機選取特徵,隨機選擇分類器,建立多顆這樣的決策樹,然後通過這幾課決策樹來投票,決定資料屬於哪一類(投票機制有一票否決制、少數服從多數、加權多數)
2. 隨機森林分類效果的影響因素
- 森林中任意兩棵樹的相關性:相關性越大,錯誤率越大;
- 森林中每棵樹的分類能力:每棵樹的分類能力越強,整個森林的錯誤率越低。
減小特徵選擇個數m,樹的相關性和分類能力也會相應的降低;增大m,兩者也會隨之增大。所以關鍵問題是如何選擇最優的m(或者是範圍),這也是隨機森林唯一的一個引數。
3. 隨機森林有什麼優缺點
優點:
- 在當前的很多資料集上,相對其他演算法有著很大的優勢,表現良好。
- 它能夠處理很高維度(feature很多)的資料,並且不用做特徵選擇(因為特徵子集是隨機選擇的)。
- 在訓練完後,它能夠給出哪些feature比較重要。
- 訓練速度快,容易做成並行化方法(訓練時樹與樹之間是相互獨立的)。
- 在訓練過程中,能夠檢測到feature間的互相影響。
- 對於不平衡的資料集來說,它可以平衡誤差。
- 如果有很大一部分的特徵遺失,仍可以維持準確度。
缺點:
- 隨機森林已經被證明在某些噪音較大的分類或迴歸問題上會過擬合。
- 對於有不同取值的屬性的資料,取值劃分較多的屬性會對隨機森林產生更大的影響,所以隨機森林在這種資料上產出的屬性權值是不可信的。
4. 隨機森林如何處理缺失值?
根據隨機森林建立和訓練的特點,隨機森林對缺失值的處理還是比較特殊的。
- 首先,給缺失值預設一些估計值,比如數值型特徵,選擇其餘資料的中位數或眾數作為當前的估計值
- 然後,根據估計的數值,建立隨機森林,把所有的資料放進隨機森林裡面跑一遍。記錄每一組資料在決策樹中一步一步分類的路徑.
- 判斷哪組資料和缺失資料路徑最相似,引入一個相似度矩陣,來記錄資料之間的相似度,比如有N組資料,相似度矩陣大小就是N*N
- 如果缺失值是類別變數,通過權重投票得到新估計值,如果是數值型變數,通過加權平均得到新的估計值,如此迭代,直到得到穩定的估計值。
其實,該缺失值填補過程類似於推薦系統中採用協同過濾進行評分預測,先計算缺失特徵與其他特徵的相似度,再加權得到缺失值的估計,而隨機森林中計算相似度的方法(資料在決策樹中一步一步分類的路徑)乃其獨特之處。
5. 什麼是OOB?隨機森林中OOB是如何計算的,它有什麼優缺點?
OOB:
上面我們提到,構建隨機森林的關鍵問題就是如何選擇最優的m,要解決這個問題主要依據計算袋外錯誤率oob error(out-of-bag error)。
bagging方法中Bootstrap每次約有1/3的樣本不會出現在Bootstrap所採集的樣本集合中,當然也就沒有參加決策樹的建立,把這1/3的資料稱為袋外資料oob(out of bag),它可以用於取代測試集誤差估計方法。
袋外資料(oob)誤差的計算方法如下:
- 對於已經生成的隨機森林,用袋外資料測試其效能,假設袋外資料總數為O,用這O個袋外資料作為輸入,帶進之前已經生成的隨機森林分類器,分類器會給出O個數據相應的分類
- 因為這O條資料的型別是已知的,則用正確的分類與隨機森林分類器的結果進行比較,統計隨機森林分類器分類錯誤的數目,設為X,則袋外資料誤差大小=X/O
優缺點:
這已經經過證明是無偏估計的,所以在隨機森林演算法中不需要再進行交叉驗證或者單獨的測試集來獲取測試集誤差的無偏估計。
6. 隨機森林的過擬合問題
你已經建了一個有10000棵樹的隨機森林模型。在得到0.00的訓練誤差後,你非常高興。但是,驗證錯誤是34.23。到底是怎麼回事?你還沒有訓練好你的模型嗎?
答:該模型過度擬合,因此,為了避免這些情況,我們要用交叉驗證來調整樹的數量。
7. 程式碼實現
GitHub:https://github.com/NLP-LOVE/ML-NLP/blob/master/Machine%20Learning/3.1%20Random%20Forest/RandomForestRegression.ipynb
作者:@mantchs
GitHub:https://github.com/NLP-LOVE/ML-NLP
歡迎大家加入討論!共同完善此專案!qq群號:【541954936】