集成方法 Ensemble


一、bagging

用於基礎模型復雜、容易過擬合的情況,用來減小 variance(比如決策樹)。基礎模型之間沒有太多聯系(相對於boosting來說),訓練可以並行。但用 bagging 並不能有助於把數據擬合的更准(那是減小 bias,要用 boosting)。

每次訓練一個基礎模型,都從 N 條訓練數據中有放回的隨機抽取出(bootstrapping) N' 條作為訓練集(雖然一般 N = N',但由於是有放回的抽,所以具體的數據還是不同的)。

 

模型做預測的時候用 average(回歸)或者 voting(分類)。

 

Out-of-bag validation(self-validation)

用 bagging 方法不一定要把訓練數據切分成訓練集和驗證集。因為每輪隨機采樣都會有一部分數據沒有被采樣到,可以用這部分數據來驗證模型的泛化能力。而且理論上有 1/e 比例的數據是從來不會被采樣出去(一輪沒有被采樣的概率是1-1/N,N 輪都沒被采樣到的概率是 (1 - 1/N)N ,當 N = ∞ 時極限是 1/e)。

例如,訓練基礎模型的數據情況如下表

那就可以用 f2+f4 在 x1 上測試;f2+f3 在 x2 上測試;...

據此,可以不用單獨分一個驗證集出來,直接用 OOB error 來衡量就行了,實做效果也是比較准確。

 

 

Random Forest(對 decision tree 的 bagging)

可以作出比較平滑的決策邊界。

 

 

 特點:

 1. 限定使用 CART 決策樹作為基礎模型

 2. 只是有放回的 resample 訓練數據是不夠的(只這樣做的話,得到每棵樹都會差不多)。還需要每次分裂的時候隨機限制一些特征不能用(在剩下的 p' 維特征中選擇最優特征進行 split),p' 越小意味着得到的決策樹模型魯棒性越好(但同時對訓練數據的擬合肯定也會變差),相當於 variance會變小但 bias 會變大,通過交叉驗證選擇一個合適的 p'

 3. 對單棵樹不剪枝,以此來減小單棵樹的 bias(讓其“專精於”那一部分特征,所以 RF 中的決策樹比較深),再借助 bagging 減小整體模型的variance(相當於從不同的角度解決問題)

 

進一步的考慮 diversifying feature expansion,每次分裂的時候只隨機選擇一部分特征來考慮,相當於輸入 x 乘上一個隨機投影矩陣 p。更 powerful 的做法是,隨機選擇一部分特征而且還做隨機組合的投影(特征重組)。(在這種情況下的分割就很像是 perceptron 了)

 

基於 permutation test 的特征選擇

如果某一維特征很重要,那么加入一些隨機噪聲(比如高斯)后,模型結果應該會變差。或者對數據的某一個維度做隨機重新排列(permutation),重新訓練模型后衡量到底變差多少。

  

如果不想完全重新訓練模型呢?在驗證的時候,算 gt(xn) 的某個時刻會用到 xn, i 的值,就換成從,對 g來說 OOB 的數據中隨機選取的值,選出來的就還是 OOB 的值。

 

對 RF 的總結:bagging of randomized CART trees with automatic validation and feature selection

 

Isolation Forest(異常檢測)

類似 Random Forest ,不同點:

 1. 采樣個數 N' 遠小於訓練樣本個數 N。因為只需要部分樣本就能夠檢測出異常點了。

 2. 建立決策樹時,隨機選擇特征 + 隨機選擇閾值來 split 。

 3. 最大決策樹深度選擇一個比較小的值,原因同 1 。

對於測試樣本 x,把其擬合到 T 棵決策樹,計算該樣本的葉子結點深度 ht(x),進一步計算出平均深度 h(x)。樣本點是異常的概率為:

s(x, N) = 2 -h(x)/c(N) ; 其中 c(N) = 2log(N-1) + ξ - 2(N-1)/N ,  ξ 為歐拉常數。取值范圍在[0, 1] ,越大越可能是異常點。

 

二、boosting

強力的保證:只要基礎分類器能夠在訓練集上實現小於 50% 的錯誤率,使用 boosting 就能在訓練集上實現 0% 錯誤率。

boosting 方法中,基礎模型的訓練是有順序的、迭代的(新的基礎模型去補強已有的基礎模型)。

怎么實現在不同的訓練集上訓練模型?

  1. resampling

  2. reweighting

  3. 實際應用的時候給樣本不同的權重系數就行了。

 

boosting 方法圍繞四個基本問題展開:

  1. 如何計算誤差率 ε

  2. 如何得到基礎分類器的權重 α

  3. 如何更新樣本權重系數 u

  4. 如何綜合所有的基礎分類器

 

Adaboost

主要思想:在讓 f1(x) 的分類效果變成隨機的新的訓練集上訓練 f2(x) ;... ;以此類推訓練新的基礎分類器,綜合起來就是整體分類器。(前向分步學習的加法模型)

  二分類問題,輸出為{+1, -1}。在訓練集上訓練 f1(x) 得到小於 0.5 的錯誤率。Z 為規范化因子

 

  改變訓練樣本的權重參數 u ,令 f1(x) 的錯誤率等於 0.5 (變成隨機分類器的效果);

 

  在新的訓練集上訓練 f2(x) 得到小於 0.5 的錯誤率;

  ...

具體怎么求解新的樣本參數 u ?(強調被錯誤分類的樣本的影響)

初始化 u1 = [1, 1, ..., 1]T,N維向量。如果第 i 個樣本 xi 被 ft(x) 正確分類,就減小其權重參數 uit (除以dt);反之,如果被分錯就增大 uit (乘dt)。

d 的計算也很簡單,t+1 時刻的樣本權重系數要讓ft(x) 錯誤率等於 0.5 

dt = ( (1 - εt)/ε)1/2 ,由於前提是 ft(x) 的錯誤率一定小於 0.5,所以 d > 1。

統一乘除兩種情況的形式:令 αt = log dt ;乘 dt 等價於乘 exp(αt),除以 dt 等價於乘 exp(-αt)

想辦法把負號和分類情況聯系起來,最后結果為:ut+1i = uti * exp(-yi * ft(xi) * αt )

得到 T 個基礎分類器后,綜合模型 H(x) = sign(Σ αt * ft(x)),sum for t = 1, 2, ..., T。

 

為什么要做 weighted sum 呢?—— 錯誤率低的 ft 對應的 αt 比較大,對最后結果影響就更大,這樣綜合基礎分類器是比較合理的。

 

證明 Adaboost 能夠在訓練集上實現 0% 的錯誤率

計算 H(x) 的錯誤率,發現其存在上界 exp( -y* g(xi) )

證明了錯誤率的上界會越來越小,以及 Adaboost 的損失函數是指數函數。

 

設 Zt 是訓練 ft 的權重參數之和,可以得到 ZT+1 的表達式,發現exp里面正好出現了g(x) = Σ αt * ft(x),得證T個基礎分類器構成的模型在訓練集的錯誤率上界訓練集錯誤率上界等於 ZT+1 / N

 

這也等價於證明了訓練樣本權重的平均值會越來越小。

根據 Z 的遞推公式,發現 Z 是隨 t 單調減,得證。

 margin

 

 

Boosting 的一般形式(從損失函數的角度解釋 Adaboost)

 

定義優化目標為最小化剛才求解出來的錯誤率上界(指數函數的 loss):

怎么實現這個優化過程呢? —— 用gradient descent

Gradient Boosting

L 對函數 g 求梯度,得到更新公式

要找到一個 ft(x) ,乘上權重 α后加到 gt-1(x) 里面,和梯度下降求解得到的對 g(x) 的更新一樣,那就讓 ft(x) 和負梯度方向一致,即內積越大越好。(先看方向,用整體損失函數的負梯度擬合第 t 輪的損失值)

轉換后的優化目標如下,相當於最小化 ft(x) 在權重參數為 ut 的訓練集上的誤差(因為要找到 ft(x) 最大化下面這個求和式子,就要讓 ft(x) 可以使得盡可能多的 n 讓 yn * ft(xn) 大於0),而 exp(-yn* gt(xn)) 恰好等於 utn 

而 α如何確定呢?求導令其等於0(因為要找到一個α令 L(g) 最小)。可以發現:令 L 對 α偏導數為 0 得到的解,和Adaboost 中的 α定義相同。

 

三、stacking

各做各的,然后把前面已經有的模型輸出作為最后一個 layer 的 new features,而且訓練數據要分成兩個部分,一部分用來訓練前面的系統,另一部分用來訓練 Final classifier。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM