翻譯維基百科介紹
梯度提升算法
梯度提升算法是一種解決迴歸和分類問題的機器學習技術,它通過對弱預測模型(比如決策樹)的集成產生預測模型。它像其他提升方法一樣以分步的方式構建模型,並且通過允許使用任意可微分的損失函數來推廣它們。
非正式介紹
和其他boost方法一樣,梯度提升方法也是通過迭代的方法聯合弱”學習者”聯合形成一個強學習者。很容易在最小二乘迴歸中解釋算法的原理,最小二乘法迴歸的目的就是“教”模型F通過將平方誤差(y^−y)2 最小化(平均訓練集)來預測形如y^=F(x) 的值。
在梯度提升的1≤m≤M 步中,假設已經有一些不完美的模型Fm (最初可以使用非常弱的模型,它只是預測輸出訓練集的平均值)。梯度提升算法不改變Fm ,而是通過增加估計器h 構建新的模型Fm+1(x)=Fm(x)+h(x) 來提高整體模型的效果。那麼問題來了,如何尋找h 函數呢?梯度提升方法的解決辦法是認爲最好的h 應該使得:
Fm+1(x)=Fm(x)+h(x)=y
或者等價於:
h(x)=y−Fm(x)
因此,梯度提升算法將
h 與殘差
y−Fm(x) 擬合。與其他boosting算法的變體一樣,
Fm+1 修正它的前身
Fm 。我們觀察到殘差
y−Fm(x) 是損失函數
12(y−F(x))2 的負梯度方向,因此可以將其推廣到其他不是平方誤差(分類或是排序問題)的損失函數。也就是說,梯度提升算法是一種梯度下降算法,只需要更改損失函數和梯度就能將其推廣。
算法
在許多監督學習問題中,都有一個輸出變量y 和一個輸入向量x ,通過聯合概率P(x,y) 可以將兩者聯繫起來。使用一個訓練集(x1,y1),…,(xn,yn) 已知x 及對應的y 。學習的目的就是通過最小化一些損失函數L(y,F(x)) 的期望值,找到F∗(x) 的近似F^(x) 。
F^=argminFEx,y[L(y,F(x))]
梯度提升算法假設一個真值
y 然後通過加權和形式的
hi(x)∈H 得到近似函數
F^(x) ,
hi(x) 被稱爲基學習器:
F^(x)=∑i=1nγihi(x)+const
根據經驗風險最小化原理,
F^(x) 可以通過對訓練集樣本平均損失求極小值得到。開始時,模型由一個常函數
F0(x) 組成,然後利用貪心策略增量擴展模型:
F0(x)=argminγ∑i=1nL(yi,γ)
Fm(x)=Fm−1(x)+argminh∈H∑i=1nL(yi,Fm−1(xi)+h(xi))
其中
hi(x)∈H 是基學習器。
不幸的是,在任意損失函數L的每個步中選擇最佳函數h,一般來說這是一個計算上不可行的優化問題。因此我們可以通過一些限制簡化問題。簡化的辦法就是使用梯度下降法解決最小化問題。假設我們考慮連續的情況,比如
H 是一個定義在
R 上可微函數的集合,我們可以根據下式更新模型:
Fm(x)=Fm−1(x)−γm∑i=1n∇Fm−1L(yi,Fm−1(xi)),
γm=argminγ∑i=1nL(yi,Fm−1(xi)−γ∂L(yi,Fm−1(xi))∂Fm−1(xi))
其中導數是關於
Fii∈[1,2..,m] 求導所得。然後在離散的情況下,比如函數集合
H 是有限的,我們將選擇最接近損失函數
L 梯度的候選函數
h ,其中
γ 可以藉助上式的線性搜索進行計算。注意,這是一個啓發式的方法,因此不能得到精確解,但是得到的近似解已經足夠精確了。
通用梯度提升方法的僞代碼如下:
輸入:訓練集{(xi,yi)}ni=1 ,可微損失函數L(y,F(x)) ,迭代次數M
算法如下:
1. 使用常量初始化模型:
F0(x)=argminγ∑i=1nL(yi,γ).
2. For m = 1 to M:
1.使用損失函數的負梯度在當前模型
Fm−1(x) 上的值近似代替殘差:
rim=−[∂L(yi,F(xi))∂F(xi)]F(x)=Fm−1(x)for i=1,…,n.
2. 使用基學習器
hm(x) 擬合近似的殘差值,即用訓練集
{(xi,rim)}ni=1 進行擬合
3. 解一維優化問題計算乘子
γm :
γm=argminγ∑i=1nL(yi,Fm−1(xi)+γhm(xi)).
4.更新模型:
Fm(x)=Fm−1(x)+γmhm(x).
3.輸出FM(x)
梯度提升樹
梯度提升算法通常用具有固定大小的決策樹(特別是CART樹)作爲基學習器。對於這種特殊情況,Friedman提出了一種改進梯度提升的方法,提高了每個基學習期的質量。一般梯度提升算法在第m步使用hm(x) 擬合近似殘差。另Jm 爲葉節點的數目。則模型樹將空間分爲Jm 個不相交的區域R1m,…,RJmm ,每個區域的預測值爲常量。利用指示函數I ,對於輸入x ,輸出hm(x) 可以有以下和的形式:
hm(x)=∑j=1JmbjmI(x∈Rjm)
其中,
bjm 是區域
Rjm 的預測值,然後係數
bjm 乘上某一值
γm ,通過線性搜索最小化損失函數得到該值,模型更新爲:
Fm(x)=Fm−1(x)+γmhm(x),γm=argminγ∑i=1nL(yi,Fm−1(xi)+γhm(xi)).
Friedman建議修改該算法,以便爲每個樹的區域選擇單獨的最優值
γmj ,而不是單個
γm 。 他稱修改後的算法爲“TreeBoost”。 修改後可以簡單地捨棄來自樹擬合過程的係數
b+jm ,並且模型更新規則變爲:
Fm(x)=Fm−1(x)+∑j=1JmγjmI(x∈Rjm)γjm=argminγ∑xi∈RjmL(yi,Fm−1(xi)+γ).
樹的大小
J 代表樹終端節點的數目,是可以根據數據集手動調整的方法參數。它控制了模型變量之間的最大相互作用。當J=2 (決策樹樁)時,變量之間不允許有相互作用。J=3 時,模型可能包括最多兩個變量之間的相互作用。
Hastie等人評論認爲, 4≤J≤8 時效果很好,預測結果對在這一範圍內選擇的J相當不敏感,J=2對於一般應用來說是不夠的,但是也很少需要取J≥10 .
(譯註:由於譯者水平有限,沒有完全這段話含義,尤其是相互作用這幾句話,希望得到大神指
點,現貼出原文)。
J , the number of terminal nodes in trees, is the method’s parameter which can be adjusted for a data set at hand. It controls the maximum allowed level of interaction between variables in the model. WithJ=2 (decision stumps), no interaction between variables is allowed. WithJ=2 the model may include effects of the interaction between up to two variables, and so on.
Hastie et al.[7] comment that typically 4≤J≤8 work well for boosting and results are fairly insensitive to the choice of J in this range, J = 2insufficient for many applications, and J > 10 is unlikely to be required.
正則化
擬合訓練集太過於接近可能會降低模型的泛化能力。幾種所謂的正則化技術通過約束擬合過程來減少這種過擬合效應。一個很自然的正則化參數是梯度提升的迭代次數M(即當基學習器是決策樹時,模型中樹的數目)。 增加M可減少訓練誤差,但將其設置得太高可能導致過擬合。 通常通過在單獨的驗證集上監測誤差來選擇M的最優值。 除了控制M之外,還可以使用其他一些正則化技術:
收縮
梯度提升算法的一個重要部分是收縮正則化,其中包括修改更新規則如下:
Fm(x)=Fm−1(x)+ν⋅γmhm(x),0<ν≤1
其中參數
ν 稱爲學習率。經驗表明,與使用較大的學習率(如
ν=1 )相比,使用較小的學習率(比如
ν<0.1 )能夠顯著的提高模型泛化能力。但是這也會使訓練時間,迭代次數增加。
隨機梯度提升
引入梯度提升方法不久之後,Friedman提出對該算法的微小修改,想法源於Breiman提出的bagging方法。具體來說,他提出在算法的每一次迭代中,基礎學習器應該隨機抽取訓練集的子樣本作爲訓練集擬合。Friedman觀察到這種修改對梯度提升的精度有實質性改善。
子樣本大小由常分數f 決定,代表子樣本大小與總樣本大小的比值。當f = 1時,算法是確定性的,與前述相同。 較小的f 則將隨機性引入到算法中,作爲正則化的一種形式有助於防止過度擬合。同時也能提高該算法的效率,因爲在每次迭代時,迴歸樹將擬合較小的數據集。 Friedman的觀點認爲,對於中小型訓練集,0.5≤f≤0.8 的效果很好。因此,f通常設置爲0.5,這意味着訓練集的一半用於構建每個基礎學習器。
和bagging算法一樣,子樣本通過評價那些在構建下一個基學習器中沒有使用的樣本集,可以定義預測性能改進的包外誤差(out-of-bag)。 包外估計可以避免需要獨立的驗證數據集,但往往低估實際性能的提升和最佳迭代次數。
葉節點中包含樣本數
梯度提升樹的實現中,還可以通過限制樹葉節點中的最小樣本數量來進行正則化(該參數在R gbm包中稱爲n.minobsinnode [10])。 它忽略將導致葉節點包含少於某一閾值數量的訓練集實例節點的分裂(譯註:也就是預剪枝)。施加此限制有助於減少葉節點預測的方差。
樹複雜度的罰項
梯度提升樹的另一個有用的正則化技術是懲罰學習模型的模型複雜性。模型複雜度可以定義爲樹中葉子的比例數(譯註:比例數?應該是指葉子總數與樹數目的比值)。 損失函數加上模型複雜度的罰項對應於修剪後的算法,可以去除一些增加模型複雜度,但對損失函數的降低影響不大的分支。 還可以添加其他類型的正則化,例如ℓ2 正則化對葉節點值的懲罰,以避免過度擬合。