寫在開頭:
實在慚愧钦睡,博客上次還寫了對xgboost的原理理解憔鬼,結(jié)果后面經(jīng)過某個事情發(fā)現(xiàn)自己
對gdbt的實際訓(xùn)練吉嚣,或者說boosting的實際過程沒有那么的理解谎亩,
這次重新回頭去看了一遍炒嘲,有了更多的理解,重新寫一下自己的理解
這次引用的別人的內(nèi)容都會注在博客的最后匈庭,因為看了以后確實加深了我的理解
其次是才明白一件事夫凸,慢就是快,越是浮躁的時候嚎花,越得打好基礎(chǔ)
1.什么叫Gradient Boosting
這部分其實之前在學(xué)習(xí)的時候看的李航老師的《統(tǒng)計學(xué)習(xí)方法》中的8.4節(jié)寸痢,并認真推導(dǎo)了他書中回歸的例子呀洲,是以mse作為損失函數(shù)的紊选,但并不知道在分類中啼止,原來其實也是以回歸的形式來做的。
首先兵罢,先解釋一下boosting(提升)献烦。提升方法的核心就是“三個臭皮匠,賽過一個諸葛亮”的思路卖词,從弱學(xué)習(xí)算法出發(fā)巩那,反復(fù)學(xué)習(xí),得到一系列的弱分類器(基分類器)此蜈,然后組合這些弱分類器即横,構(gòu)成一個強分類器。大多數(shù)的提升方法都是改變訓(xùn)練數(shù)據(jù)的概率分布(訓(xùn)練數(shù)據(jù)的權(quán)值分布)裆赵。這句話一開始不太容易理解东囚,以分類問題來解釋就是:調(diào)用弱學(xué)習(xí)算法得到一個弱分類器,這個弱分類器得到了各個訓(xùn)練數(shù)據(jù)屬于某個類別的概率战授,(同原本樣本的先驗概率有一定差距页藻,不然怎么是弱分類器),即改變了訓(xùn)練數(shù)據(jù)的概率分布植兰,再調(diào)用弱學(xué)習(xí)算法得到一個弱分類器份帐,如此反復(fù),得到一系列弱分類器
所以楣导,對于提升方法來說废境,需要解決兩個問題:一是每一輪學(xué)習(xí)中,如何改變訓(xùn)練數(shù)據(jù)的權(quán)值或者概率分布爷辙;二是如何將弱分類器組合成一個強分類器彬坏。
當(dāng)然了解boosting的人會知道Adaboost,這篇博客中有關(guān)于adaboost詳細的推導(dǎo)(https://www.cnblogs.com/linyuanzhou/p/5019166.html
多說一句adaboost膝晾,我實際手寫推導(dǎo)學(xué)習(xí)過栓始,里面讓預(yù)測結(jié)果偏差大的樹的權(quán)重在下一輪訓(xùn)練中變大的數(shù)學(xué)方法還是很巧妙了,模型會逐步自己關(guān)注那些被錯誤分類的點血当,adaptive也代表著adaboost名字里面前半部分ada幻赚,但是這樣也會導(dǎo)致模型對離群樣本點過于關(guān)注,有噪音時模型效果很差)
2.GB訓(xùn)練過程1
了解了所謂的boosting后臊旭,我們得到上面的兩個問題落恼,對于第一個問題,在GBDT中离熏,其實就是通過擬合損失函數(shù)的負梯度值在當(dāng)前模型的值佳谦,這里需要注意的,在以前的機器學(xué)習(xí)算法中滋戳,我們都是通過直接擬合真實值钻蔑,而在GBDT里啥刻,我們擬合的目標不再是真實值,而是一個梯度值咪笑,當(dāng)然這個梯度值和真實值有關(guān)系可帽,后面部分會說明。
對于第二個問題窗怒,GBDT中的基分類器當(dāng)然是決策樹映跟。但是決策樹有很多比如C4.5、ID3扬虚、CART等等努隙。那么用的是哪種樹?在GBDT里辜昵,用的是CART(分類與回歸樹)剃法,同時Sklearn里面實現(xiàn)GBDT時用的基分類器也是CART。
簡單介紹一下CART路鹰。一般的CART是這樣的:用于分類任務(wù)時贷洲,樹的分裂準則采用基尼指數(shù),用于回歸任務(wù)時晋柱,用MSE(均方誤差)优构。
注意:當(dāng)然在回歸任務(wù)中,分裂準則也不再局限于用MSE雁竞,也可以用MAE钦椭,還可以用Friedman_mse(改進型的mse)。
上面提到碑诉,CART可以用于回歸和分類彪腔,那么到底用回歸還是分類呢?上面我們已經(jīng)提到了进栽,GBDT擬合的目標是一個梯度值德挣,這個值當(dāng)然是一個連續(xù)值或者說實值,所以在GBDT里快毛,通通都是回歸樹格嗅。
有了基分類器后,如何將這些基分類器組合起來唠帝?boosting方法一般是使用加法模型屯掖。
即:
其實利用GB訓(xùn)練強學(xué)習(xí)器的思路,總結(jié)下來就是下面這個過程:
對于算法的第4步襟衰,在這里先簡單提一下贴铜,其目的就是為了求一個最優(yōu)的基分類器。對于不同的基分類器有不同的尋找,比如绍坝,對于決策樹赶熟,尋找一個最優(yōu)的樹的過程其實依靠的就是啟發(fā)式的分裂準則。
對于算法的第5步陷嘴,是一個Line search 的過程,具體可以參考Friedman的文章间坐。在GBDT里灾挨,通常將這個過程作為Shrinkage,也就是把ρm做為學(xué)習(xí)率ρm做為學(xué)習(xí)率竹宋,后面實踐部分可以看到效果劳澄。
對于算法的第6步,求得新的基分類器后蜈七,利用加法模型秒拔,更新出下一個模型Fm(x)
大家可以發(fā)現(xiàn),對于算法的第1步我沒有提到飒硅,這是因為砂缩,這個需要在講完第3步才能夠說明。算法的第1步是一個初始化的過程三娩。為什么需要初始化庵芭?很簡單,因為每次在計算負梯度值時需要用到前一個模型Fm?1(xi)預(yù)測的值雀监。對于我們訓(xùn)練的第一個模型m=1而言需要有F0(xi)的存在双吆。
那么F0(x)初始化為多少?這個取決于loss function的選擇会前,下面給出一般的做法:
當(dāng)loss function選擇MSE時好乐,F(xiàn)0(x)=yˉ,yˉ為樣本真實值的平均值
當(dāng)loss function選擇MAE時瓦宜,F(xiàn)0(x)=mediany蔚万,也就說用真實值的中位數(shù)作為初始值。
當(dāng)loss function選擇logisit loss時
這里需要注意的是临庇,這里就是利用對數(shù)幾率來初始化笛坦,分子∑yi就是正樣本的個數(shù),分母就是負樣本的個數(shù)苔巨。
3. GB訓(xùn)練過程2
對于步驟4: 其想表達的是以{y~i,xi}N為訓(xùn)練數(shù)據(jù)版扩,擬合一顆回歸樹,最終得到葉子節(jié)點的區(qū)域
對于步驟5:
在步驟4我們得到葉子節(jié)點對應(yīng)的區(qū)域侄泽,那么葉子節(jié)點的取值為多少礁芦?也就是這顆樹到底輸出多少? 在Friedman的論文中有這部分的推導(dǎo)。這里簡單總結(jié)一下: 葉子節(jié)點的取值和所選擇的loss function有關(guān)柿扣。對于不同的Loss function肖方,葉子節(jié)點的值也不一樣。
最后一個步其實就是把前面已經(jīng)訓(xùn)練的m?1顆樹預(yù)測的結(jié)果加上剛訓(xùn)練好的第m顆樹的預(yù)測結(jié)果未状。
具體的回歸的例子 李航的書里面也有
<u>https://blog.csdn.net/qq_22238533/article/details/79185969</u>
上面這個博客里面也有很細的推導(dǎo)不做多講俯画,主要講講分類的實例
分類實例
參數(shù)配置:
1. 以logloss為損失函數(shù)
2. 以MSE為分裂準則
3. 樹的深度為1
4. 學(xué)習(xí)率為0.1
參考資料:
1.https://blog.csdn.net/qq_22238533/article/details/79192579
2.https://blog.csdn.net/qq_22238533/article/details/79185969
3.https://www.taodocs.com/p-39621555.html
4.https://blog.csdn.net/google19890102/article/details/79496256
gbdt多分類講解
https://blog.csdn.net/qq_22238533/article/details/79199605
多分類的實際就是多訓(xùn)練了幾棵樹
是1對n的形式來實現(xiàn), 通過softmax來形成概率