《統(tǒng)計(jì)學(xué)習(xí)方法》第 8 章“提升方法”學(xué)習(xí)筆記

集成學(xué)習(xí)

集成學(xué)習(xí)主要有下面 3 種思路:

1、袋裝法 Bagging:隨機(jī)森林是 Bagging 的典型代表,Bagging 的特點(diǎn)是不同分類器可以并行執(zhí)行。

2、Boosting:Boosting 類算法的特點(diǎn)是:不同分類器串行執(zhí)行。

3、Stacking:類似于神經(jīng)網(wǎng)絡(luò)一樣的堆疊算法。

AdaBoost

AdaBoost 算法是前向分步算法的特例,AdaBoost 模型等價(jià)于損失函數(shù)為指數(shù)函數(shù)的加法模型(李航《統(tǒng)計(jì)學(xué)習(xí)方法》P144)。

AdaBoost 算法:樣本有權(quán)重,分類器也有權(quán)重,更關(guān)注錯(cuò)誤的樣本。

1、我們對(duì)錯(cuò)誤的樣本給予更高的關(guān)注;

2、后面的分類器對(duì)這些錯(cuò)誤的樣本給予更多的關(guān)注,即權(quán)重更大;

3、具體來說,我們會(huì)計(jì)算一個(gè)分類器的錯(cuò)誤率,如果錯(cuò)誤率越低,這個(gè)分類器的權(quán)重就會(huì)越高。

1、加法模型

加法模型形如:
f(x) = \sum\limits_{m=1}^{M}\alpha_mG_{m}(x)
遞推公式形如:
f_m(x) = f_{m-1}(x) + \alpha_mG_{m}(x)
遞推公式在推導(dǎo)中會(huì)多次用到。

2、損失函數(shù)

損失函數(shù)定義成指數(shù)函數(shù):
L(y,f(x)) = \exp[-yf(x)]
把上面的遞推公式代入的時(shí)候,指數(shù)部分的加法就可以變成帶底數(shù)的乘法,分離出一個(gè)在前面幾輪已經(jīng)得出,并且視為確定的乘法因子,我們把這個(gè)乘法因子叫做權(quán)重。

3、兩個(gè)權(quán)重

樣本的權(quán)重決定了分類器和錯(cuò)誤率,由錯(cuò)誤率可以計(jì)算出分類器的權(quán)重。

1、根據(jù)當(dāng)前訓(xùn)練的分類器更新樣本的權(quán)重;

2、根據(jù)當(dāng)前訓(xùn)練的分類器得到這個(gè)分類器在最終加法因子中的權(quán)重。

我在學(xué)習(xí)過程中遇到的難點(diǎn)

1、每一次迭代希望得到的是一個(gè)基礎(chǔ)分類器 G_m(x) 和這個(gè)分類器在最終加和模型中的權(quán)重 \alpha_m,那么之前的權(quán)重和基礎(chǔ)分類器都應(yīng)該視為已知;

2、訓(xùn)練當(dāng)前分類器的時(shí)候,損失函數(shù)應(yīng)該是帶“權(quán)重”的,這是因?yàn)槲覀冊(cè)诙x損失函數(shù)的時(shí)候,考慮了之前迭代的結(jié)果,我們看一看之前確定的那部分,即權(quán)重的表達(dá)式:\overline w_{mi} =\exp[-y_if_{m-1}(x_i)],分類正確的這個(gè)值小,分類錯(cuò)誤的這個(gè)值大,這也符合邏輯。這里 f_{m-1}(x) 是之前 m-1 個(gè)分類器帶權(quán)重的加和。

說這些要強(qiáng)調(diào)的結(jié)論就是:訓(xùn)練基分類器的時(shí)候,是要考慮“權(quán)重”的,這個(gè)“權(quán)重”表達(dá)了之前的訓(xùn)練結(jié)果在訓(xùn)練樣本上的好壞。于是,這一輪訓(xùn)練的基礎(chǔ)分類器會(huì)重點(diǎn)看之前分錯(cuò)的樣本。

損失函數(shù)的表達(dá)式如下:
L(y,f(x)) = \sum_{i=1}^{N}\overline w_{mi} \exp(-y_i\alpha_mG_{m}(x))
訓(xùn)練 G_m(x) 即找到:
G_{m}^*(x) = \underbrace{arg\;min\;}_{G} \sum_{i=1}^{N}\overline w_{mi} I(y_i \neq G(x_i))
理解這個(gè)式子就從損失函數(shù)的定義出發(fā),即:損失函數(shù)就是計(jì)算預(yù)測(cè)值和真實(shí)值不等的樣本的總和,用指數(shù)和用示性函數(shù)表達(dá)其實(shí)是一樣的,只不過用指數(shù)更放大了損失。

這里關(guān)鍵是在于:訓(xùn)練基礎(chǔ)分類器的時(shí)候,一定是帶樣本權(quán)重的,如果不帶上樣本權(quán)重,就不是 Boosting 的思想了。

3、從損失函數(shù)出發(fā),先確定當(dāng)前最優(yōu)的 G_m(x) ,再確定其系數(shù) \alpha_m,方法是求導(dǎo)。具體是把樣本從 1N 分成兩部分,即“分對(duì)的部分”和“分錯(cuò)的部分”,然后加一項(xiàng)減一項(xiàng),推導(dǎo)出下面的等式。
\begin {aligned} L(y,f(x)) &= \sum_{i=1}^{N}\overline w_{mi} \exp(-y_i\alpha_mG_{m}(x)) \\ &=\sum_{y_i = G_m(x_i)}\overline w_{mi} e^{-\alpha} + \sum_{y_i \neq G_m(x_i)}\overline w_{mi} e^{\alpha} \\ &=\sum_{y_i = G_m(x_i)}\overline w_{mi} e^{-\alpha} + \sum_{y_i \neq G_m(x_i)}\overline w_{mi} e^{-\alpha} - \sum_{y_i \neq G_m(x_i)}\overline w_{mi} e^{-\alpha} + \sum_{y_i \neq G_m(x_i)}\overline w_{mi} e^{\alpha} \\ &= e^{-\alpha}\sum_{i=1}^{N}\overline w_{mi} + (e^{\alpha} - e^{-\alpha})\sum_{y_i \neq G_m(x_i)}\overline w_{mi} \\ &= e^{-\alpha}\sum_{i=1}^{N}\overline w_{mi} + (e^{\alpha} - e^{-\alpha})\sum_{i=1}^N \overline w_{mi} I(y_i \neq G_m(x_i)) \end {aligned}
然后上面的式子對(duì)于 \alpha 求導(dǎo)數(shù),并令導(dǎo)函數(shù)為 0。具體過程是這樣的:

公式推導(dǎo)

其中
\cfrac{\sum_{i=1}^N \overline w_{mi} I(y_i \neq G_m(x_i))}{\sum_{i=1}^{N}\overline w_{mi}}

就是錯(cuò)誤率,每一個(gè)都帶權(quán)重,分布正好是權(quán)重之和,符合錯(cuò)誤率的定義,因此,這里干脆我們就把分子分母同時(shí)除以
\sum_{i=1}^{N}\overline w_{mi}
也就是即分母,讓分母為 1 ,這樣分子就得到了一個(gè)新的權(quán)重,這就是歸一化的過程。

4、權(quán)重更新公式,即如何根據(jù)當(dāng)前權(quán)重得到下一輪的權(quán)重

要根據(jù)當(dāng)前基分類器的結(jié)果和基礎(chǔ)分類器的權(quán)重計(jì)算得到,并且還要?dú)w一化。已知加法模型的遞推公式:

f_m(x) = f_{m-1}(x) + \alpha_mG_{m}(x)

\overline w_{mi} =\exp[-y_if_{m-1}(x_i)]

它們二者都是定義,可以得到遞推公式:

\begin {aligned} \overline w_{m+1,i} &=\exp[-y_if_{m}(x_i)] \\ &=\exp[-y_i[f_{m-1}(x_i) + \alpha_mG_{m}(x_i)]]\\ &=\exp[-y_if_{m-1}(x_i)]\exp[-y_i\alpha_mG_{m}(x_i)]\\ &=\overline w_{m,i}\exp[-y_i\alpha_mG_{m}(x_i)] \end {aligned}

5、分類錯(cuò)誤率越小,分類器的權(quán)重就越大,這一點(diǎn)是合理的,公式推導(dǎo)中結(jié)論也是合理的。
\alpha_m = \cfrac{1}{2}\log\cfrac{1 - e_m}{e_m}
說明:對(duì)數(shù)函數(shù)是增函數(shù),1-e_m 表示正確率,與 e_m 是此消彼長(zhǎng)的,正確率越高,\alpha_m 的值就越大。

數(shù)學(xué)公式的部分我寫在了簡(jiǎn)書上了: AdaBoost 公式推導(dǎo)。

4、AdaBoost 算法優(yōu)點(diǎn)

  • 很好的利用了弱分類器進(jìn)行級(jí)聯(lián)(弱分類器串行,并且后面的分類器訓(xùn)練的是“殘差”)。

  • 可以將不同的分類算法作為弱分類器。

  • AdaBoost具有很高的精度。

  • 相對(duì)于bagging算法和Random Forest算法,AdaBoost充分考慮的每個(gè)分類器的權(quán)重。

5、Adaboost 算法缺點(diǎn)

  • AdaBoost迭代次數(shù)也就是弱分類器數(shù)目不太好設(shè)定,可以使用交叉驗(yàn)證來進(jìn)行確定。

  • 數(shù)據(jù)不平衡導(dǎo)致分類精度下降。

  • 訓(xùn)練比較耗時(shí),每次重新選擇當(dāng)前分類器最好切分點(diǎn)。

6、AdaBoost 應(yīng)用領(lǐng)域

模式識(shí)別,計(jì)算機(jī)視覺領(lǐng)域,用于二分類和多分類場(chǎng)景。

7、AdaBoost 和 Gradient-Boosting

  • AdaBoost 基于權(quán)重;

  • Gradient-Boosting 基于殘差。

下面是手寫筆記:

image-20190220134627498
手寫筆記1
手寫筆記2
手寫筆記3
image-20190222095622040
image-20190222095644447
image

image

image

梯度提升樹 GBDT :通過不斷地?cái)M合殘差 (residual)來“糾錯(cuò)”基學(xué)習(xí)器

GBDT 即 Gradient Boosting Decision Tree?;A(chǔ)是 GBM,當(dāng) M 成為 DT 的時(shí)候,就是 GBDT。

GBDT 的基模型是決策樹(CART),所以“GBDT”最后兩個(gè)字母是“DT”;

GBDT 每一輪迭代擬合殘差,即每一輪找到的 CART,即下面的 h_t(x) ,每一輪就是學(xué)習(xí)它 ,要讓樣本的損失變得更小:損失函數(shù):L(y,f_{t}(x))=L(y,f_{t-1}(x)+h_t(x))

可以這樣認(rèn)為:每一輪加上一個(gè)函數(shù),就可以讓預(yù)測(cè)結(jié)果越來越接近真實(shí)值 y 。

基本思想非常簡(jiǎn)單:基學(xué)習(xí)器存在著預(yù)測(cè)錯(cuò)誤的情況,在下一輪基學(xué)習(xí)器學(xué)習(xí)時(shí)努力地糾正這個(gè)錯(cuò)誤。

在回歸問題中,這個(gè)錯(cuò)誤被稱為殘差。比如,在學(xué)習(xí)樣本 (x,y) 得到一個(gè)模型 f,預(yù)測(cè)值為 \hat{y} = f(x),那么殘差為:
y - \hat{y} = y- f(x)
如果定義損失函數(shù)為平方損失函數(shù):\cfrac{1}{2}(y-f(x))^2,那么其梯度為:
\frac{\partial \frac{1}{2}(y-f(x))^2}{\partial f(x)} = f(x) - y
可以發(fā)現(xiàn):殘差為負(fù)梯度方向。理解這里對(duì)函數(shù) f(x) 求導(dǎo)。

其實(shí)思想還是很簡(jiǎn)單的,差多少,就加一個(gè)模型去擬合多少。所以提升樹可以看成是決策樹的加法模型。

image

最速下降法與梯度下降法的區(qū)別

引用:http://sofasofa.io/forum_main_post.php?postid=1001153

維基百科這個(gè)說法不是太嚴(yán)謹(jǐn)。 準(zhǔn)確來說,它們并不是完全等價(jià)。 對(duì)于梯度下降法,我們需要預(yù)先設(shè)定步長(zhǎng) \alpha。而最速下降法的這個(gè)步長(zhǎng) \alpha_k 是通過一個(gè)優(yōu)化函數(shù)計(jì)算得到的。
\alpha_k=\text{argmin}_{\alpha_k} \; f(x_i-\alpha_k \nabla f{x_i})
參考資料:自己動(dòng)手用 python 寫梯度下降


以下為草稿,我自己留著備用,讀者可以忽略,歡迎大家批評(píng)指正。

參考資料

1、https://scikit-learn.org/stable/modules/ensemble.html#adaboost

2、劉建平:集成學(xué)習(xí)之Adaboost算法原理小結(jié)

3、劉建平:scikit-learn Adaboost類庫使用小結(jié)

4、https://blog.csdn.net/Cdd2xd/article/details/77342350

5、https://zhuanlan.zhihu.com/p/43443518

6、Adaboost 算法的原理與推導(dǎo)

三張簡(jiǎn)圖搞懂GBDT
https://blog.csdn.net/accumulate_zhang/article/details/82178494#comments
GBDT 是決策樹,后一步基于之前的結(jié)果,擬合殘差。

Boosting決策樹:GBDT :https://www.cnblogs.com/en-heng/p/6927620.html

image-20190221124022232

這篇文章還提到了 Shrinkage 。

Gradient Boosting梯度提升-GBDT與XGBoost解析及應(yīng)用

地址:https://mp.weixin.qq.com/s/xV0LnPEofxB3PjsNqeh8Iw

通俗、有邏輯的寫一篇說下Xgboost的原理,供討論參考

https://blog.csdn.net/github_38414650/article/details/76061893

GBDT:梯度提升決策樹

http://www.itdecent.cn/p/005a4e6ac775

GBDT算法原理深入解析

https://blog.csdn.net/yangxudong/article/details/53872141

https://www.zybuluo.com/yxd/note/611571

從0開始機(jī)器學(xué)習(xí)-隨機(jī)森林和GBDT
https://zhuanlan.zhihu.com/p/37676630

xgboost中的數(shù)學(xué)原理

https://blog.csdn.net/a358463121/article/details/68617389

說明:這篇文章講得還比較清楚,還提到了 Shrinkage 與采樣

http://kaggle比賽必備算法XGBoost入門及實(shí)戰(zhàn)

www.manongjc.com/article/57510.html

GBM 與 GBDT 與 XgBoost

https://blog.csdn.net/Cdd2xd/article/details/77426622

這篇文章內(nèi)容比較全面,不是抄書。

七月的文章,可以好好看一下

https://blog.csdn.net/v_JULY_v/article/details/81410574

Machine Learning筆記 - XGBOOST 教程

http://codewithzhangyi.com/2018/06/01/XGBOOST%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E/

XGBoost算法原理

https://zxth93.github.io/2017/09/29/XGBoost算法原理/index.html

Machine Learning筆記 - XGBOOST 教程

https://blog.csdn.net/huangdunxian/article/details/70570982

知乎“憶臻” :https://zhuanlan.zhihu.com/p/32709034
解釋了為什么負(fù)梯度的范數(shù)小于一個(gè)很小的數(shù)的時(shí)候,搜索就可以停止了;
最后舉了一個(gè)例子,很直觀地體現(xiàn)了,其實(shí)每一步求解的是關(guān)于步長(zhǎng)的一元函數(shù)的最優(yōu)值,這是直線搜索,在這篇文章中有提到。http://www.sigai.cn/paper_43.html

最速下降法 = 解析法 + 迭代法;

理解梯度提升算法1-梯度提升算法
http://www.sigai.cn/paper_43.html

凸優(yōu)化(六)——最速下降法
說明:來自簡(jiǎn)書 http://www.itdecent.cn/p/1238602a2720,是《凸優(yōu)化》那本書的筆記。

劉建平:梯度提升樹(GBDT)原理小結(jié)

https://www.cnblogs.com/zengzhen94/p/8744970.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容