幾個加性提升模型

根據Schapire的理論, 我們可以通過組合幾個僅僅比隨機猜測略好的模型來獲得一個非常精確的模型. 我們把這個過程叫做提升(boosting). 加性模型爲我們提供了一種”組合幾個弱分類器”的形式. 很多著名模型都是加性提升的, 如適應性提升(AdaBoost)以及梯度提升決策樹(GBDT).

1. 加性模型

  • (1.1) 加性模型: f(x)=j=1Mβjb(x;λj)
  • (1.2) 訓練誤差: xL(γ)
  • (1.3) 前向分佈算法:
    minβm+1,λm+1xL(y,fm+1(x))fm+1(x)=fm(x)+βm+1b(x;λm+1)

對於訓練集{(x,y)} , 我們訓練含參模型b(;λ)M 個實例b(,λ1),b(,λ2),,b(,λM) , 並使用它們的加權和來擬合x 的輸出:y^=f(x) , 這樣的模型f 叫做加性模型, 如公式(1.1)所示.

公式(1.2)定義了模型誤差的評價方式, L 叫做損失函數, γ 表示分類間隔, 它把模型輸出和真值得差異映射成一個實數.損失函數通常應該滿足這樣的性質:

  • RR
  • 非增

爲了方便, 我們也把損失函數寫爲L=L(y,f(x)) .

如何得到加性模型中Mβ 以及Mλ 的值呢? 一方面, 我們不會單獨訓練每個b , 這樣會得到M 個相同的b ; 另一方面, 我們也不會同時訓練所有的b , 因爲這會引入大量未知參數, 很難保證訓練時間和模型精度.

對於這樣的窘境, 我們有一種聰明的解決辦法, 叫做前向分佈法:

  1. 我們首先訓練f1(x)=β1b(x;λ1)
  2. 當我們得到模型fm 後, 我們利用本節公式(3)來訓練模型fm+1
  3. f=fM

2. AdaBoost

  • (2.1) 訓練誤差: L(y,f(x))=eyf(x)
  • (2.2) 前向分佈算法:
    minβm+1,λm+1i=1Nwm+1,ieyiβm+1b(xi;λm+1)wm+1,i=eyifm(xi)
  • (2.3) 迭代更新:
    wm+1,i=wm,ieyiβmb(xi;λm)λm+1=minλ1i=1Nwm+1,iI[yib(xi;λ)]βm+1=12ln1em+1em+1,em+1b(x,λm+1)

在加性模型中, 如果我們使用指數損失函數則得到AdaBoost模型. 此時我們有γ=yf(x)L(γ)=eγ , 損失函數的最終形式如公式(2.1)所示.

此時, 公式(1.3中的目標函數(沒有正則化喲)變爲:

=minβm+1,λm+1xey(fm(x)+βm+1b(x;λm+1))minβm+1,λm+1xeyfm(x)eyβm+1b(x;λm+1)
, 即公式(2.2).

事實上, 一旦我們確定了損失函數, 那麼我們能做的不是隻有確定目標函數, 我們甚至可以得到模型中各個參數的求解方法.

我們首先推導wm+1,i 的迭代更新公式. 這是因爲wm+1,i 的值僅僅依賴於yifm(xi) , 與第m+1 次迭代過程中要求的未知參數βm+1,λm+1 無關, 並且後兩個參數的求解反而要依賴wm+1,i . 此迭代更新公式的推導如下:

wm+1,i=eyifm(xi)=eyi[fm1(xi)+βmb(xi;λm)]=eyifm1(xi)eyiβmb(xi;λm)=wm,ieyiβmb(xi;λm)

現在我們來思考λm+1,βm+1 的迭代更新公式. 我們知道, 在計算fm+1 的時候, 我們實際上無法求出兩個參數βm+1,λm+1 . 這裏我們採用了的策略是, 首先求取λm+1 , 然後求取βm+1 .

當我們計算λm+1 的時候, 我們需要對加性模型的第m+1 個分量b(x;λ) 進行訓練. 但是, 我們只有一個訓練集, 如果我們每次都使用這個訓練集訓練b(x;λ) , 那麼我們將總是得到相同的λ , 這是顯然的, 因爲在相同的訓練集訓練同一個含參模型, 當然會得到相同的參數. 爲了讓b(x;λm+1) 的訓練與b(x;λm) 的訓練不同, 我們必須對訓練集做一些改變. 改變什麼呢? 其實改變的策略有很多, 但是對於AdaBoost而言, 我們改變每個樣本的錯分類代價. 什麼意思? 當訓練模型b(x,λm+1) 的時候, 每個樣本的錯分類代價爲fm 的指數損失:eyfm(x) . 也就是說, 當樣本xi 被錯分類的時候, 我們就將eyifm(xi) 加到總的損失上. 這體現了AdaBoost的核心思想: 上一次被錯分類的樣本, 會在本次訓練中得到重點關注, 並且, 錯的越離譜, 得到的關注就越大. 這樣, 由於每次訓練b 的時候, 每個模型的錯分類代價都是不相同的, 我們最終會得到五花八門的λ .

隨後, 將λm+1 的值帶回公式(2.2), 適當變形後對βm+1 求導, 可求得βm+1 的迭代更新公式. 這樣, 我們就得到了一套求解AdaBoost模型的完整公式, 即公式(2.3.

3. 平方損失提升樹(殘差樹)

  • (3.1) 殘差樹:
    {L(y,f)=[yf(x)]2βb=T
  • (3.2) 前向分佈算法:
    minλm+1i=1N[rm,iT(xi;λm+1)]2rm,i=yifm(xi)

公式(3.1)的意思是: 如果我們使用平方損失L(γ)=γ2 , 使用一棵決策樹來充當弱分類器並且去掉b 的權重參數β, 那麼我們就得到了一棵殘差樹.

觀察公式(3.2)給出的前向分佈算法, 我們發現這個算法是可以簡化的: 我們通過訓練T(;λm+1) 來擬合fm 的殘差, 從而得到最終的模型f . 這是因爲:

L(y,fm+1)=[yfm+1]2=[yfmTm+1]2=[rmTm+1]2

4. 梯度提升樹

(4.1) 梯度提升樹:

{L=βb=T

(4.2) 前向分佈算法:
minλm+1i=1N[rm,i,T(xi;λm+1)]2rm,i=L(yi,fm+T(xi;λm+1)fm

公式(4.1)所示, 如果我們放鬆殘差樹上對L 的約束, 使之可以使用任意損失函數. 我們就得到了梯度提升樹.梯度一詞源於此模型的解法, 如公式(4.2)所示, 我們使用損失函數的負梯度在當前模型上的值, 來代替當前模型的殘差, 然後跟求解殘差樹一樣求解此模型.

參考資料

[1]. <統計學習方法>
[2]. <The Elements of Statistical Learning >
[3]. sklearn documentation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章