1. 程式人生 > >第10章-基於樹的方法(3)-樹的改進-整合方法

第10章-基於樹的方法(3)-樹的改進-整合方法

參考:
https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf
rob.schapire.net/papers/explaining-adaboost.pdf
*https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
http://www.saedsayad.com/docs/gbm2.pdf
http://www.52caml.com/head_first_ml/ml-chapter6-boosting-family/


10.8.4 隨機森林

Leo Breiman 研究了基於決策樹的擴充套件演算法,稱作隨機森林。有很多軟體可以實施該演算法,可以先閱讀wiki上的簡介:

http://en.wikipedia.org/wiki/Random_forest

詳細介紹,將在後面講解。我們先來說一下其它決策樹的改進方向。

  • 候選問題 vs 節點劃分方法

決策樹的後續問題是關於變數大於還是小於給定的值的問題。
另一些改進,是把候選問題擴充套件為更復雜的問題,或更復雜的分裂方法。

舉例,在每個節點上,用線性判別分析等。然而,原始的決策樹方法仍然是最流行的,而且沒有很強的證據顯示這種擴充套件方式會帶來更好的結果。

10.10 裝袋法與隨機森林概述

之前,我們都是聚焦在產生單一結果集的統計學習過程上,舉例來說:

  • 在一組係數(或平滑後的係數)下產生的迴歸方程;
  • 在一組葉節點下產生的分類樹;

我們總要抉擇從候選模型中選出最優的一個。

整合方法:

接下來,我們將要討論基於整合多個輸出集合的統計學習方法。整合的過程中,需要多次使用資料集。

每一輪使用資料集時, 輸入X與輸出Y如之前一樣被建立關係。然而,有趣的是現在我們要將每一輪產生的結果收集起來。整合結果有幾個重要的優勢:

  • 將收集起來的擬合結果平均化,會避免過擬合。整合方法趨於把由特定模型產生的異常特徵去除掉,因此結果更穩定;
  • 嘗試更多的擬合,可以產生更多樣的擬合函式;
  • 結合平均化的結果以及多樣化的擬合函式,有打破 bias-variance tradeoff 的潛力
    (備註:均方誤差可以分解成:
    Error = Bias + Variance + Noise
    bias-variance tradeoff 表示偏差與方差是此消彼長的關係);

回顧過擬合:

任何從資料集上擬合出來的模式,都會面臨過擬合的風險。所有擬合方法都是讓模型更符合我們手邊已有的資料,即使是對同一總體,新的樣本的擬合質量也很可能會下降。因此,泛化的使用該模型是有風險的。

以決策樹為例:

過擬合風險往往與下面因素有關:

  • 1) 分裂次數
  • 2) 預測的類別數
  • 3) 樹的層數(同時代表著葉節點數)

當分類樹出現過擬合問題時,分類的錯誤率就被低估了。模型將不會有很好的泛化能力。

理想情況下,我們有來自總體的兩份隨機樣本:一個作為訓練集,另一個作為測試集。通過測試集得到的擬合優度的測量,是對分類器準確率的一個很好的估計。然而通常,我們只有一個數據集。此時,我們可以把資料集隨機分為不重疊的、相等數量的若干份。以分10份為例,迴圈選取每一份為測試集,其他9份合起來作為訓練集。下面的例子中,用到了2-折交叉驗證,來估計模型A和模型B的分類錯誤率。模型的選擇是選取具有最小交叉驗證下的預測誤差率的模型。

.

10.11 裝袋法 (bagging)

使用從資料中得到的子樣本,以及通過自助法對子樣本進行平均化處理的這種思想是非常強大的。

裝袋法利用了這種思想,以更基本的方法處理過擬合問題。
Leo Breiman, 發明了這種方法,被稱為”bootstrap aggregating” or simply “bagging” 。
(see the reference: “Bagging predictors,” Machine Learning, 24:123-140, 1996, cited by 7466).

在分類樹中,對於由訓練集自助法得到的每個樣本建立起的分類器,裝袋法採用了多數投票的原則。

演算法:對N個觀察樣本數和一個二分響應變數組成的資料集的擬合算法,考慮步驟如下,

  • 從資料集中有放回隨機抽樣,樣本量為N
  • 構建未剪枝的分類樹
  • 確定給每個葉(終)節點的分類,儲存每個樣本的原始類以及預測分類
  • 大量地重複1-3步多次
  • 對資料集中的每個樣本,統計在所有決策樹中劃分為某一類的次數
  • 根據劃分為某一類的最大頻數來確定最終分類。因此,如果以至少50%以上的頻率被劃分分類“1”,最終就確定為這個分類。

    儘管還有很多關鍵變數和細節需要考慮,但是裝袋法的主要步驟就如上所述。平均化處理基於大量自助法樣本產生的結果的這種思想,除了分類樹,還可以運用到更廣泛的其他分類方法中去。

Margins:
裝袋法產生了一個新的概念, “margins.”
“margins” = 一個樣本被正確分類的比率 - 一個樣本被錯誤分類的比率
舉例,如果對於所有的樹,一個樣本被正確分類的比率為75%,那麼它的margins=0.75-0.25=0.50

大的 margins 意味著一個更穩定的分類。理想情況下,對於所有樣本都要保持一個較高的 margins. 這將預示著,分類器對新資料具有很好的泛化能力。

Out-Of-Bag 樣本:

對於每個樹,沒有被自助法樣本包含的資料,稱為 “out-of-bag” 樣本. 這部分樣本可以被當作測試集。

為了得到更好的模型估計,估計錯誤率僅使用”out-of-bag” 樣本.換句話說,這種錯誤率的估計,是根據這些沒有使用過”out-of-bag” 樣本生成的樹所計算得到的。

例子:家庭暴力研究

為什麼裝袋法奏效呢 ? 其核心思想是對於由自助法得到的結果進行平均化處理。作為估計,平均化幫助我們消除隨機波動的影響。當然遠不止這些,細節的討論將放在後面。

用來預測住戶中家庭暴力情況的資料已經被收集到了。以警長的手下被派到處理家庭暴力事件的住戶為樣本。警官收集一些用來預測未來家庭暴力的資訊,比如說,過去這段時間,是否有警官被這些住戶呼叫過。

下圖是三個分類樹,都是基於同一個資料集構建的,但每次都是基於自助法生成的不同的樣本。

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

很明顯三個圖非常不同。不穩定的結果可能是由於幾種常見問題導致的:
樣本量很小,預測變數有相關性;或者葉節點的不純性。當分類樹出現這些問題時,使用一顆樹的結果是非常有風險的。然而,把分類樹整體作為一個分類工具,單看類的預測結果則可能是相對穩定的,即使樹本身的結構有差異。

傳統迴歸中,當預測變數存在高度相關時,也會出現這種現象。迴歸係數的估計可能非常不穩定,但是不代表擬合出的結果也是不穩定的。

雖然沒法清楚知道三顆樹之間的偏倚是多少,但是樹之間的方差應該是比較大的。裝袋法有助於減小方差。裝袋法的優勢是集成了自助法產生的多個擬合結果。理想情況下,自助法的每個擬合結果都是低偏差、高方差的,也許平均化的手段可以有效地減少 bias-variance tradeoff. 裝袋法整合擬合結果的這種思想是許多其他統計學習發展的基礎。

裝袋法對於數值型的因變數同樣奏效:

  • 對每棵樹,葉節點的每個樣本被賦予了這個葉節點下的樣本均值
  • 對於每個樣本都進行上一步走
  • 每個樣本的均值即為裝袋法的擬合值

裝袋法的R包:
ipred 包的 bagging() 可以被用在分類、迴歸以及生存樹上
nbagg 包 …
我們也可以用”randomForest” 包,因為裝袋法是隨機森林的一個特例。

10.12 從裝袋法到隨機森林

裝袋法基於自助法產生的樣本生成了大量的樹,但是現在要在生成每個樹的同時,且節點進行分裂之前,對特徵變數也進行隨機抽樣。舉例來說,如果有20個特徵變數,隨機選5個來進行分裂生成最好的樹。在每個節點重複這個過程,直到樹足夠大。然後與裝袋法一樣,此處不進行剪枝。

隨機森林演算法:

與裝袋法的演算法很像,令N為樣本個數,且假定自變數是二元響應變數。

  1. 從資料中隨機有放回地抽取樣本量為N的樣本(自助法)。
  2. 隨機有放回的選取特徵變數(x)。
  3. 根據第二步中選擇的特徵變數(x)進行分裂。
  4. 對於每個分裂都重複2-3步直到樹生成的足夠大。不用剪枝。每個樹都是從一個隨機樣本中產生的,每個節點的分裂也是根據隨機特徵變數的選取。
  5. 把out-of-bag的資料運用到生成的樹中。存下每個樣本的原始分類和預測分類。
  6. 大量重複1-5步(比如說500步)。
  7. 對於資料集中國年的每個樣本點,統計對於一個樣本點預測為某一類的次數(即,預測為此類的樹的個樹)。
  8. 每個樣本被預測為最多次數的那個類就是最重分類。因此如果51%的樹都預測某個樣本為類別”1”,那麼此樣本就是被預測為這個分類。

為什麼隨機森林奏效

方差的縮減:每個樹都是獨立的,因為自助法的抽樣和特徵變數的抽樣。
- 很顯然,隨機森林樹bagging的一種形式,對於樹的平均化能夠充分地減少結果的不穩定性。而且,因為每個分裂的節點都是基於特徵變數的隨機選取,由此得到的擬合值也會有更好的獨立性。因此,對大量的樹進行平均化處理產生的收效非常驚人。

偏差的縮減:隨機選取了大量的特徵變數,每個變數對於樹的構成都至關重要。
- 隨機森林由大量隨機抽取的特徵變數產生,因此有更多的資訊被用於減少擬合值的偏差。
- 對於決策樹,常常是由少數特徵變數控制著整個分裂過程,因為從平均化的意義上看,這些變數會比其他特徵更好一點。結果就會導致在區域性可能會非常有用的特徵並沒有被選上的機會。而隨機森林這種由大量隨機樣本產生的樹,並且在每個節點都隨機挑選特徵變數的特質將會有一些機會減少上樹問題。因此,區域性特徵有機會去定義一個分裂。

事實上,隨機森林到目前為止仍是最優秀的分類器之一(Breiman, 2001a).

隨機森林涉及對三個引數對調整:

  • 節點的規模:與決策樹不同,每個樹的葉節點的樣本量可能很小。目的就是生成樹的同時儘量減少產生偏差的可能性。
  • 樹的規模:實踐中,500顆樹通常是個不錯的選擇。
  • 特徵變數的選擇:每個分裂節點上對特徵變數的選擇上至關重要的,將會影響到隨機森林的效果。每次選取2-5個特徵是合適的。

    例子(略)

    綜上,如果用準確率來作為一個結果的衡量時,裝袋法比決策樹法要好。因為它是對資料集上通過自助法產生的隨機樣本構建了許多顆樹。而且隨機森林法要比裝袋法好。因為它在裝袋法的基礎上又在每個節點上對特徵進行了隨機選取。

R包:
在R中,我們可以用”randomForest”包實現隨機森林.

In R, the random forest procedure can be implemented by the “randomForest” package.

rf=randomForest(x=X.train,y=as.factor(Y.train),importance=T,do.trace=50, ntree=200,classwt=c(5,1))
print(rf)

.

10.13 提升法

提升法,與裝袋法類似,是對統計學習結果改進的一種通用方法。提升法也適用於分類樹。

回想,裝袋法是將原始資料集通過自助法產生多個樣本,並基於每個樣本產生獨立的決策樹,再將多個樹的預測結果以投票的方式進行合併。而提升法是序列地產生樹的,即後一個樹是在前一個樹的基礎上生成的。

這裡寫圖片描述

從AdaBoost到Gradient Boosting,參考知乎專欄

(當然bagging和Adaboost、boosting是整合弱分類器的策略,所以除了CART演算法以外,是可以結合其他分類器的.如xgboost包就可以使整合線性分類器,gbm包也可以整合其他分類器)