根據Schapire的理論, 我們可以通過組合幾個僅僅比隨機猜測略好的模型來獲得一個非常精確的模型. 我們把這個過程叫做提升(boosting). 加性模型爲我們提供了一種”組合幾個弱分類器”的形式. 很多著名模型都是加性提升的, 如適應性提升(AdaBoost)以及梯度提升決策樹(GBDT).
1. 加性模型
- (1.1) 加性模型:
f(x)=∑j=1Mβj⋅b(x;λj) - (1.2) 訓練誤差:
∑xL(γ) - (1.3) 前向分佈算法:
⎧⎩⎨⎪⎪minβm+1,λm+1∑xL(y,fm+1(x))fm+1(x)=fm(x)+βm+1b(x;λm+1)
對於訓練集公式(1.1)
所示.
公式(1.2)
定義了模型誤差的評價方式,
R→R - 非增
- 凸
爲了方便, 我們也把損失函數寫爲
如何得到加性模型中
對於這樣的窘境, 我們有一種聰明的解決辦法, 叫做前向分佈法:
- 我們首先訓練
f1(x)=β1⋅b(x;λ1) - 當我們得到模型
fm 後, 我們利用本節公式(3)
來訓練模型fm+1 f=fM
2. AdaBoost
- (2.1) 訓練誤差:
L(y,f(x))=e−yf(x) - (2.2) 前向分佈算法:
⎧⎩⎨⎪⎪⎪⎪minβm+1,λm+1∑i=1Nwm+1,ie−yi⋅βm+1⋅b(xi;λm+1)wm+1,i=e−yi⋅fm(xi) - (2.3) 迭代更新:
⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪wm+1,i=wm,ie−yi⋅βm⋅b(xi;λm)λm+1=minλ−1∑i=1Nwm+1,iI[yi≠b(xi;λ)]βm+1=12ln1−em+1em+1,em+1是b(x,λm+1)的訓練損失
在加性模型中, 如果我們使用指數損失函數則得到AdaBoost模型. 此時我們有公式(2.1)
所示.
此時, 公式(1.3
中的目標函數(沒有正則化喲)變爲:
公式(2.2)
.
事實上, 一旦我們確定了損失函數, 那麼我們能做的不是隻有確定目標函數, 我們甚至可以得到模型中各個參數的求解方法.
我們首先推導
現在我們來思考
當我們計算
隨後, 將公式(2.2)
, 適當變形後對公式(2.3
.
3. 平方損失提升樹(殘差樹)
- (3.1) 殘差樹:
{L(y,f)=[y−f(x)]2β⋅b=T - (3.2) 前向分佈算法:
⎧⎩⎨⎪⎪⎪⎪minλm+1∑i=1N[rm,i−T(xi;λm+1)]2rm,i=yi−fm(xi)
公式(3.1)
的意思是: 如果我們使用平方損失
觀察公式(3.2)
給出的前向分佈算法, 我們發現這個算法是可以簡化的: 我們通過訓練
4. 梯度提升樹
(4.1) 梯度提升樹:
{L=任意損失函數β⋅b=T
(4.2) 前向分佈算法:⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪minλm+1∑i=1N[rm,i,T(xi;λm+1)]2rm,i=−∂L(yi,fm+T(xi;λm+1)∂fm
如公式(4.1)
所示, 如果我們放鬆殘差樹上對公式(4.2)
所示, 我們使用損失函數的負梯度在當前模型上的值, 來代替當前模型的殘差, 然後跟求解殘差樹一樣求解此模型.
參考資料
[1]. <統計學習方法>
[2]. <The Elements of Statistical Learning >
[3]. sklearn documentation