Bagging是bootstrap aggregating。思想就是從整體樣本當中隨機取一部分樣本進行訓練,經過屢次這樣的結果,進行投票獲取平均值做爲結果輸出,這就極大可能的避免了很差的樣本數據,從而提升準確度。由於有些是很差的樣本,至關於噪聲,模型學入噪聲後會使準確度不高。git
舉個例子:github
假設有1000個樣本,若是按照之前的思惟,是直接把這1000個樣本拿來訓練,但如今不同,先抽取800個樣原本進行訓練,假如噪聲點是這800個樣本之外的樣本點,就頗有效的避開了。重複以上操做,提升模型輸出的平均值。面試
Random Forest(隨機森林)是一種基於樹模型的Bagging的優化版本,一棵樹的生成確定仍是不如多棵樹,所以就有了隨機森林,解決決策樹泛化能力弱的特色。(能夠理解成三個臭皮匠頂過諸葛亮)算法
而同一批數據,用一樣的算法只能產生一棵樹,這時Bagging策略能夠幫助咱們產生不一樣的數據集。Bagging策略來源於bootstrap aggregation:從樣本集(假設樣本集N個數據點)中重採樣選出Nb個樣本(有放回的採樣,樣本數據點個數仍然不變爲N),在全部樣本上,對這n個樣本創建分類器(ID3\C4.5\CART\SVM\LOGISTIC),重複以上兩步m次,得到m個分類器,最後根據這m個分類器的投票結果,決定數據屬於哪一類。bootstrap
每棵樹的按照以下規則生成:dom
一開始咱們提到的隨機森林中的「隨機」就是指的這裏的兩個隨機性。兩個隨機性的引入對隨機森林的分類性能相當重要。因爲它們的引入,使得隨機森林不容易陷入過擬合,而且具備很好得抗噪能力(好比:對缺省值不敏感)。性能
總的來講就是隨機選擇樣本數,隨機選取特徵,隨機選擇分類器,創建多顆這樣的決策樹,而後經過這幾課決策樹來投票,決定數據屬於哪一類(投票機制有一票否決制、少數服從多數、加權多數)學習
減少特徵選擇個數m,樹的相關性和分類能力也會相應的下降;增大m,二者也會隨之增大。因此關鍵問題是如何選擇最優的m(或者是範圍),這也是隨機森林惟一的一個參數。測試
優勢:優化
缺點:
根據隨機森林建立和訓練的特色,隨機森林對缺失值的處理仍是比較特殊的。
其實,該缺失值填補過程相似於推薦系統中採用協同過濾進行評分預測,先計算缺失特徵與其餘特徵的類似度,再加權獲得缺失值的估計,而隨機森林中計算類似度的方法(數據在決策樹中一步一步分類的路徑)乃其獨特之處。
OOB:
上面咱們提到,構建隨機森林的關鍵問題就是如何選擇最優的m,要解決這個問題主要依據計算袋外錯誤率oob error(out-of-bag error)。
bagging方法中Bootstrap每次約有1/3的樣本不會出如今Bootstrap所採集的樣本集合中,固然也就沒有參加決策樹的創建,把這1/3的數據稱爲袋外數據oob(out of bag),它能夠用於取代測試集偏差估計方法。
袋外數據(oob)偏差的計算方法以下:
優缺點:
這已經通過證實是無偏估計的,因此在隨機森林算法中不須要再進行交叉驗證或者單獨的測試集來獲取測試集偏差的無偏估計。
你已經建了一個有10000棵樹的隨機森林模型。在獲得0.00的訓練偏差後,你很是高興。可是,驗證錯誤是34.23。究竟是怎麼回事?你尚未訓練好你的模型嗎?
答:該模型過分擬合,所以,爲了不這些狀況,咱們要用交叉驗證來調整樹的數量。
做者:@mantchs