1.什麼是隨機森林
1.1 Bagging思想
Bagging是bootstrap aggregating。思想就是從整體樣本當中隨機取一部分樣本進行訓練,經過屢次這樣的結果,進行投票獲取平均值做爲結果輸出,這就極大可能的避免了很差的樣本數據,從而提升準確度。由於有些是很差的樣本,至關於噪聲,模型學入噪聲後會使準確度不高。git
舉個例子:github
假設有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個分類器的投票結果,決定數據屬於哪一類。bootstrap
每棵樹的按照以下規則生成:dom
- 若是訓練集大小爲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. 代碼實現
做者:@mantchs
GitHub:https://github.com/NLP-LOVE/ML-NLP
歡迎你們加入討論!共同完善此項目!qq羣號:【541954936】<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=863f915b9178560bd32ca07cd090a7d9e6f5f90fcff5667489697b1621cecdb3"><img border="0" src="http://pub.idqqimg.com/wpa/images/group.png" alt="NLP面試學習羣" title="NLP面試學習羣"></a>