《從機器學習到深度學習》筆記(5)集成學習之隨機森林

集成學習模型與其餘有監督模型的出發點截然不同,以前的模型都是在給定的訓練集上經過構建愈來愈強大的算法進行數據擬合。而集成學習着重於在訓練集上作文章:將訓練集劃分爲各類子集或權重變換後用較弱的基模型擬合,而後綜合若干個基模型的預測做爲最終總體結果。在Scikit-Learn中實現了兩種類型的集成學習算法,一種是Bagging methods,另外一種是Boosting methods。python

隨機森林(Random Forrest)是Bagging方法的一個典型表明,由它的名稱就能夠聯想到它是一種使用決策樹做爲基模型的集成學習方法。算法

1. 集成框架數據庫

隨機森林在訓練過程當中對訓練集進行隨機抽樣,分別進行訓練後造成若干個小的決策樹。分類問題的預測經過這些基決策樹的投票完成,迴歸問題的預測經過對基決策樹結果求平均完成,整個流程如圖3-17所示。bootstrap

圖3-17 隨機森林算法原理app

隨機森林基模型中的決策樹通常採用有較大誤差和較小方差的「弱模型」,和普通的決策樹相比具體體如今:框架

  1. 樣本裁剪:經過隨機採樣每一個弱模型只訓練部分樣本數據;
  2. 特徵裁剪:每一個基模型的決策樹只選用數據特徵中的一部分進行訓練和預測;隨機抽樣保證了全部特徵都能被部分弱模型學習到;
  3. 小樹:因爲特徵和樣本數量有限每一個弱模型決策樹都長不高,因此不須要像普通決策樹那樣在訓練結束後爲避免過分擬合而執行剪枝。

2. 有放回採樣(bootstrap)dom

在從總體訓練集中進行隨機採樣劃分子訓練集時,隨機森林一般採用所謂的有放回採樣(bootstrap)手段。有放回採樣是指每次抽取一個樣本放入子集後將改樣本仍保留在被採樣空間中,使得它仍有可能被再次採樣到。好比有盤水果:1個橘子,2個蘋果,3個香蕉,對該盤水果進行2次有放回採樣徹底可能採樣到2個橘子(雖然機率比較小);若是使用無放回採樣則最多采樣到1個橘子。機器學習

在總體樣本數量足夠多的狀況下,經過bootstrap採樣到的子集只有指望約爲63.2%的無重複樣本。使用這種採樣有什麼好處呢?學習

由於bootstrap可以生成出與訓練樣本總體不一樣的數據分佈,這樣等於擴充了訓練樣本空間,因此經過bootstrap採樣可以訓練出適應性更強的模型。測試

3. Out-of-bag Estimation

在本書第1章中有介紹過,通常機器學習模型的評估須要經過與訓練集相互獨立的另外一個測試集完成。而Bagging類模型在訓練過程當中劃分不一樣獨立數據子集的行爲在側面引入了另外一個好處,就是可使用訓練數據自己進行模型準確率的評估。

這就是所謂的Out-of-bag Estimation(簡稱OOB),是指基模型的評估預測只採用未參與到其自己訓練的數據集上。所以雖然總體上沒有給出獨立的測試集,但每一個基模型本身使用的訓練數據和預測數據是徹底隔離的,如圖3-18所示。

圖3-18 Out-of-bag示意圖

圖中的實線標示基模型訓練時使用的數據,虛線標示進行評估預測時基模型使用的數據。只要保證每條訓練數據沒有重複的被應用在單個基模型上,就能夠保證評估結果的公允性。

4. RandomForestClassifier和RandomForestRegressor

在sklearn.ensemble包中提供了完整封裝的隨機森林模型RandomForestClassifier和RandomForestRegressor,它們的使用方式與其餘模型無異。在模型參數方面,因爲隨機森林使用決策樹做爲基模型,因此在模型初始化過程當中保留了全部DecitionTreeXXX模型中的決策樹相關參數,此外還提供了關於抽樣方式和OOB評估的配置屬性,好比:

>>>from sklearn.datasets import load_iris

>>>from sklearn.ensemble import RandomForestClassifier

>>>iris = load_iris()                                                  # 導入iris數據庫



>>>clf = RandomForestClassifier(n_estimators = 20, bootstrap=True, oob_score=True)

>>>clf.fit(iris.data, iris.target)                                       # 訓練               



>>>clf.oob_score_                                                         # 查看OOB評估結果

0.946666666667

  上述代碼使用了Scikit-learn的測試數據庫iris做爲訓練數據來源,在初始化隨機森林迴歸模型的時候配置n_estimators定義基模型的數量、配置了參數bootstrap=True使用有放回採、配置oob_score=True指定在訓練後進行OOB測試,在訓練後立刻經過oob_score_屬性得到了準確性評估。

注意:若是未在模型初始化時指定oob_score=True則不能在訓練後訪問oob_score_屬性。

從機器學習,到深度學習

從深度學習,到強化學習

從強化學習,到深度強化學習

從優化模型,到模型的遷移學習

一本書搞定!

相關文章
相關標籤/搜索