集成學(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、加法模型
加法模型形如:
遞推公式形如:
遞推公式在推導(dǎo)中會(huì)多次用到。
2、損失函數(shù)
損失函數(shù)定義成指數(shù)函數(shù):
把上面的遞推公式代入的時(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è)分類器在最終加和模型中的權(quán)重
,那么之前的權(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á)式:,分類正確的這個(gè)值小,分類錯(cuò)誤的這個(gè)值大,這也符合邏輯。這里
是之前
個(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á)式如下:
訓(xùn)練 即找到:
理解這個(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)的 ,再確定其系數(shù)
,方法是求導(dǎo)。具體是把樣本從
到
分成兩部分,即“分對(duì)的部分”和“分錯(cuò)的部分”,然后加一項(xiàng)減一項(xiàng),推導(dǎo)出下面的等式。
然后上面的式子對(duì)于 求導(dǎo)數(shù),并令導(dǎo)函數(shù)為
。具體過程是這樣的:

其中
就是錯(cuò)誤率,每一個(gè)都帶權(quán)重,分布正好是權(quán)重之和,符合錯(cuò)誤率的定義,因此,這里干脆我們就把分子分母同時(shí)除以
也就是即分母,讓分母為 ,這樣分子就得到了一個(gè)新的權(quán)重,這就是歸一化的過程。
4、權(quán)重更新公式,即如何根據(jù)當(dāng)前權(quán)重得到下一輪的權(quán)重
要根據(jù)當(dāng)前基分類器的結(jié)果和基礎(chǔ)分類器的權(quán)重計(jì)算得到,并且還要?dú)w一化。已知加法模型的遞推公式:
和
它們二者都是定義,可以得到遞推公式:
5、分類錯(cuò)誤率越小,分類器的權(quán)重就越大,這一點(diǎn)是合理的,公式推導(dǎo)中結(jié)論也是合理的。
說明:對(duì)數(shù)函數(shù)是增函數(shù), 表示正確率,與
是此消彼長(zhǎng)的,正確率越高,
的值就越大。
數(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 基于殘差。
下面是手寫筆記:









梯度提升樹 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,即下面的 ,每一輪就是學(xué)習(xí)它 ,要讓樣本的損失變得更小:損失函數(shù):
可以這樣認(rèn)為:每一輪加上一個(gè)函數(shù),就可以讓預(yù)測(cè)結(jié)果越來越接近真實(shí)值 。
基本思想非常簡(jiǎn)單:基學(xué)習(xí)器存在著預(yù)測(cè)錯(cuò)誤的情況,在下一輪基學(xué)習(xí)器學(xué)習(xí)時(shí)努力地糾正這個(gè)錯(cuò)誤。
在回歸問題中,這個(gè)錯(cuò)誤被稱為殘差。比如,在學(xué)習(xí)樣本 得到一個(gè)模型
,預(yù)測(cè)值為
,那么殘差為:
如果定義損失函數(shù)為平方損失函數(shù):,那么其梯度為:
可以發(fā)現(xiàn):殘差為負(fù)梯度方向。理解這里對(duì)函數(shù) 求導(dǎo)。
其實(shí)思想還是很簡(jiǎn)單的,差多少,就加一個(gè)模型去擬合多少。所以提升樹可以看成是決策樹的加法模型。

最速下降法與梯度下降法的區(qū)別
引用:http://sofasofa.io/forum_main_post.php?postid=1001153
維基百科這個(gè)說法不是太嚴(yán)謹(jǐn)。 準(zhǔn)確來說,它們并不是完全等價(jià)。 對(duì)于梯度下降法,我們需要預(yù)先設(shè)定步長(zhǎng) 。而最速下降法的這個(gè)步長(zhǎng)
是通過一個(gè)優(yōu)化函數(shù)計(jì)算得到的。
參考資料:自己動(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
三張簡(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

這篇文章還提到了 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)化》那本書的筆記。