根據schapire的理論, 我們可以通過組合幾個僅僅比隨機猜測略好的模型來獲得乙個非常精確的模型. 我們把這個過程叫做提公升(boosting).加性模型為我們提供了一種」組合幾個弱分類器」的形式. 很多著名模型都是加性提公升的, 如適應性提公升(adaboost)以及梯度提公升決策樹(gbdt).
對於訓練集, 我們訓練含參模型b(
⋅;λ)
的m個例項b(
⋅,λ1
),b(
⋅,λ2
),…,
b(⋅,
λm), 並使用它們的加權和來擬合
x 的輸出:y^
=f(x
), 這樣的模型
f 叫做加性模型, 如公式(1.1)
所示.
公式(1.2)
定義了模型誤差的評價方式,
l叫做損失函式,
γ 表示分類間隔, 它把模型輸出和真值得差異對映成乙個實數.損失函式通常應該滿足這樣的性質:
為了方便, 我們也把損失函式寫為l=
l(y,
f(x)
) .
如何得到加性模型中
m 個β以及
m 個
λ的值呢? 一方面, 我們不會單獨訓練每個
b , 這樣會得到
m個相同的
b ; 另一方面, 我們也不會同時訓練所有的
b, 因為這會引入大量未知引數, 很難保證訓練時間和模型精度.
對於這樣的窘境, 我們有一種聰明的解決辦法, 叫做前向分布法:
我們首先訓練f1
(x)=
β1⋅b
(x;λ
1)當我們得到模型fm
後, 我們利用本節公式(3)
來訓練模型fm
+1f=f
m
在加性模型中, 如果我們使用指數損失函式則得到adaboost模型. 此時我們有γ=yf(x
) 且l(
γ)=e
−γ, 損失函式的最終形式如公式(2.1)
所示.
此時,公式(1.3
中的目標函式(沒有正則化喲)變為:
=minβm
+1,λ
m+1∑
xe−y
⋅(fm
(x)+
βm+1
⋅b(x
;λm+
1))minβm
+1,λ
m+1∑
xe−y
⋅fm(
x)⋅e
−y⋅β
m+1⋅
b(x;
λm+1
) , 即公式(2.2)
.
事實上, 一旦我們確定了損失函式, 那麼我們能做的不是只有確定目標函式, 我們甚至可以得到模型中各個引數的求解方法.
我們首先推導wm
+1,i
的迭代更新公式. 這是因為wm
+1,i
的值僅僅依賴於yi
和fm(
xi) , 與第m+
1 次迭代過程中要求的未知引數βm
+1,λ
m+1 無關, 並且後兩個引數的求解反而要依賴wm
+1,i
. 此迭代更新公式的推導如下:wm
+1,i
=e−y
i⋅fm
(xi)
=e−y
i⋅[f
m−1(
xi)+
βm⋅b
(xi;
λm)]
=e−y
i⋅fm
−1(x
i)⋅e
−yi⋅
βm⋅b
(xi;
λm)=
wm,i
⋅e−y
i⋅βm
⋅b(x
i;λ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
的指數損失:e−
yfm(
x). 也就是說, 當樣本xi
被錯分類的時候, 我們就將e−
yifm
(xi)
加到總的損失上. 這體現了adaboost的核心思想:上一次被錯分類的樣本, 會在本次訓練中得到重點關注, 並且, 錯的越離譜, 得到的關注就越大.這樣, 由於每次訓練
b 的時候, 每個模型的錯分類代價都是不相同的, 我們最終會得到五花八門的λ.
隨後, 將λm
+1的值帶回公式(2.2)
, 適當變形後對βm
+1求導, 可求得βm
+1的迭代更新公式. 這樣, 我們就得到了一套求解adaboost模型的完整公式, 即公式(2.3
.
公式(3.1)
的意思是: 如果我們使用平方損失l(
γ)=γ
2 , 使用一棵決策樹來充當弱分類器並且去掉
b 的權重引數
β, 那麼我們就得到了一棵殘差樹.
觀察公式(3.2)
給出的前向分布演算法, 我們發現這個演算法是可以簡化的: 我們通過訓練t(
⋅;λm
+1) 來擬合fm
的殘差, 從而得到最終的模型
f . 這是因為: l(
y,fm
+1)=
[y−f
m+1]
2=[y
−fm−
tm+1
]2=[
rm−t
m+1]
2
(4.1) 梯度提公升樹: {l如=任意損
失函式β
⋅b=t
(4.2) 前向分布演算法: ⎧
⎩⎨⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
minλm+
1∑i=
1n[r
m,i,
t(xi
;λm+
1)]2
rm,i
=−∂l
(yi,
fm+t
(xi;
λm+1
)∂fm
公式(4.1)
所示, 如果我們放鬆殘差樹上對
l 的約束, 使之可以使用任意損失函式. 我們就得到了梯度提公升樹.梯度一詞源於此模型的解法, 如公式(4.2)
所示, 我們使用損失函式的負梯度在當前模型上的值, 來代替當前模型的殘差, 然後跟求解殘差樹一樣求解此模型.
[1]. 《統計學習方法》
[2].
[3]. sklearn documentation
廣義加性模型和樹模型
傳統線性模型所面臨的問題 在現實生活中,變數的作用通常不是線性的。廣義加性模型是一種自由靈活的統計模型,它可以用來探測到非線性回歸的影響。模型如下 e y x1 xp f 1 x1 f2 x2 fp xp x1 xp 是 器 predictor 其實就是自變數 y 是輸出 fj 是非引數函式 和 f...
Unity AssetBundle的幾個載入方式
第一種載入ab的方式,非同步進行載入從二進位制檔案中 ienumerator loadab 第二種進行資源載入,同步載入 instantiate assetbundle.loadfrommemory file.readallbytes path loadasset cubewall 第三種載入ab的...
Unity AssetBundle的幾個載入方式
第一種載入ab的方式,非同步進行載入從二進位制檔案中 ienumerator loadab 第二種進行資源載入,同步載入 instantiate assetbundle.loadfrommemory file.readallbytes path loadasset cubewall 第三種載入ab的...