1、提升方法的基本思路
提升方法的基本思想就是“三個(gè)臭皮匠賽過諸葛亮”,更嚴(yán)謹(jǐn)?shù)恼f什燕,是由“弱學(xué)習(xí)算法”提升為“強(qiáng)學(xué)習(xí)算法”卿闹〗腋猓“弱”和“強(qiáng)”的定義由Kearns和Valiant提出:弱可學(xué)習(xí)指存在一個(gè)多項(xiàng)式算法可學(xué)習(xí)它且學(xué)習(xí)正確率僅比隨機(jī)猜測好萝快;強(qiáng)可學(xué)習(xí)指存在一個(gè)多項(xiàng)式算法可學(xué)習(xí)它且學(xué)習(xí)正確率很高。非常有趣的是Schapire證明了強(qiáng)可學(xué)習(xí)與弱可學(xué)習(xí)是等價(jià)的著角。也就是說在PAC學(xué)習(xí)的框架下揪漩,一個(gè)概念是強(qiáng)可學(xué)習(xí)的充要條件是這個(gè)概念弱可學(xué)習(xí)。這就為我們將“弱學(xué)習(xí)算法”提升為“強(qiáng)學(xué)習(xí)算法”提供了理論基礎(chǔ)吏口。
理論基礎(chǔ)有了奄容,我們?cè)賮砜匆幌绿嵘椒ǖ?strong>動(dòng)機(jī),其實(shí)這個(gè)動(dòng)機(jī)很自然产徊,對(duì)一個(gè)問題而言昂勒,弱學(xué)習(xí)器的訓(xùn)練比強(qiáng)學(xué)習(xí)器容易得多。另外舟铜,我個(gè)人認(rèn)為提升方法還可以在樣本不太大的情形下發(fā)揮作用戈盈,因?yàn)樘嵘椒ㄋ龅氖戮褪亲尭鱾€(gè)基學(xué)習(xí)器關(guān)注不同的樣本,最后達(dá)到兼顧各個(gè)樣本的效果谆刨,可以充分發(fā)揮每個(gè)樣本的作用(這一說法未必準(zhǔn)確塘娶,但《統(tǒng)計(jì)學(xué)習(xí)方法》中只包含10個(gè)樣本的例題似乎印證了這一點(diǎn))。
最后簡單說一下提升方法的基本思路痊夭。提升方法就是從弱學(xué)習(xí)算法出發(fā)刁岸,反復(fù)學(xué)習(xí)得到一系列弱分類器(基分類器),然后組合這些弱分類器構(gòu)成一個(gè)強(qiáng)分類器她我。不難看出這其中的要點(diǎn)有兩個(gè)虹曙,一是如何得到這一系列弱分類器,二是如何組合這些弱分類器鸦难,下面我們看一下AdaBoost是如何處理這兩個(gè)步驟的根吁。
2、AdaBoost算法
AdaBoost算法的流程如下:
(1)初始化訓(xùn)練數(shù)據(jù)權(quán)值分布(均勻分布):
(2)對(duì)
- 使用具有權(quán)值分布的數(shù)據(jù)集進(jìn)行學(xué)習(xí)得到基分類器:
- 計(jì)算在訓(xùn)練數(shù)據(jù)集上的分類誤差率(帶權(quán)重的誤差率):
- 計(jì)算的系數(shù):
- 更新訓(xùn)練數(shù)據(jù)集權(quán)值分布:
這里是規(guī)范化因子:
(3)構(gòu)建基本分類器的線性組合:
從而得到最終分類器:
我們看一下算法中的要點(diǎn):
a)的系數(shù)合蔽,可以看到時(shí)击敌,且隨的減小而增大。這是合理的拴事,前者說明一個(gè)基分類器至少要優(yōu)于隨機(jī)分類器其權(quán)重才大于0沃斤,后者說明分類誤差率越小的基分類器在最終分類器中的權(quán)重越大。
b)更新訓(xùn)練數(shù)據(jù)權(quán)值的式子可以寫成:
在a)中我們已經(jīng)說明了刃宵,因此這里的衡瓶,,這意味著被基分類器誤分類樣本的權(quán)值被擴(kuò)大牲证,而被正確分類樣本的權(quán)值則被縮小哮针。也就是說訓(xùn)練下一個(gè)分類器的時(shí)候我們重點(diǎn)關(guān)注當(dāng)前分類器誤分的樣本,這樣下一個(gè)分類器將與當(dāng)前分類器“互補(bǔ)”,從而最后組合起來將達(dá)到在全體數(shù)據(jù)上較好的效果十厢。
c)需要注意的是等太,我們訓(xùn)練各個(gè)基學(xué)習(xí)器是序列化進(jìn)行的,而不是同時(shí)進(jìn)行的蛮放,這也意味著AdaBoost算法不能并行計(jì)算缩抡。也就是說,我們訓(xùn)練當(dāng)前學(xué)習(xí)器時(shí)用的樣本權(quán)重是由前一個(gè)學(xué)習(xí)器用的樣本權(quán)重及其分類結(jié)果決定的包颁,因此要按次序進(jìn)行瞻想。
3、AdaBoost算法誤差分析
定理1
AdaBoost算法最終分類器的訓(xùn)練誤差界為:
證明:
當(dāng)時(shí)娩嚼,蘑险,因此
當(dāng)時(shí),
從而前半部分得證岳悟。
后半部分推導(dǎo)要用到和權(quán)重的關(guān)系:
由上式可得:
從而后半部分得證漠其。
定理1為我們提供了AdaBoost的訓(xùn)練誤差界,所以我們每一輪選取的應(yīng)該使得最小竿音,從而使訓(xùn)練誤差下降最快。
定理2
二分類問題AdaBoost的訓(xùn)練誤差界滿足:
證明:
這就完成了定理2中等號(hào)部分的證明拴驮,至于不等號(hào)的證明春瞬,我們把項(xiàng)拆開并用代替,于是現(xiàn)在需要證明的結(jié)論為:
即:
即:
這在時(shí)是顯然的套啤。從而定理2得證宽气。
不難看出,定理2是在定理1的基礎(chǔ)上推出的一個(gè)更寬泛的上界潜沦,這個(gè)上界與各個(gè)基分類器的錯(cuò)誤率有關(guān)萄涯,衡量的其實(shí)是分類器由于隨機(jī)分類器的程度,若這個(gè)程度有一個(gè)下界:唆鸡,即各個(gè)基分類器都與隨機(jī)分類器的誤差率之間有一個(gè)“間隙”涝影,則:
這表明隨基學(xué)習(xí)器數(shù)目的增加,AdaBoost的訓(xùn)練誤差以指數(shù)速率下降争占。這是非常好的性質(zhì)燃逻。
4、AdaBoost算法解釋
AdaBoost的另一個(gè)解釋是模型為加法模型臂痕、損失函數(shù)為指數(shù)函數(shù)伯襟、學(xué)習(xí)算法為前向分步算法時(shí)的二分類學(xué)習(xí)方法。
以上解釋中有幾個(gè)關(guān)鍵詞:加法模型握童,前向分步姆怪,指數(shù)函數(shù)。
所謂加法模型,就是最終學(xué)習(xí)器是由各個(gè)基學(xué)習(xí)器帶權(quán)加和而成的:
這里表示基函數(shù)的參數(shù)稽揭,表示基函數(shù)的系數(shù)俺附。
所謂前向分布,就是對(duì)于使得上述經(jīng)驗(yàn)風(fēng)險(xiǎn)極小化的問題:
直接優(yōu)化組參數(shù)是非常復(fù)雜的淀衣。前向分布算法的思路是每一步只學(xué)習(xí)一個(gè)基學(xué)習(xí)器及參數(shù)舞痰,即一次只學(xué)習(xí)一組系數(shù)千贯。具體來說,每步只需優(yōu)化:
得到最優(yōu)參數(shù),然后更新:
最后痕鳍,我們以定理的形式說明AdaBoost的損失函數(shù)是指數(shù)函數(shù)。
定理3
AdaBoost算法是前向分步加法算法的特例腻贰,模型是由基分類器組成的加法模型洛波,損失函數(shù)是指數(shù)函數(shù)。即損失函數(shù)為:
證明:
假設(shè)經(jīng)過輪迭代前向分步算法已經(jīng)得到:
第輪迭代得到册舞,則為:
目標(biāo)是使前向分步算法得到的使的指數(shù)損失最性烫汀:
上式可表示為:
可以看到不依賴和,與最小化無關(guān)调鲸。
下面我們先求最優(yōu)的盛杰,對(duì)任意:
當(dāng)時(shí),藐石,又為定值即供,所以我們希望盡可能小,即:
這正是AdaBoost算法的基本分類器于微,接下來我們求:
將帶入上式逗嫡,則有:
又因?yàn)闄?quán)重之和為1:
從而原式變成:
對(duì)求導(dǎo)并令其為0:
這也與AdaBoost算法的完全一致。
最后我們看每一輪樣本權(quán)值的更新株依。由:
可知:
可以看到驱证,除了規(guī)范化因子,這與AdaBoost算法的權(quán)值更新過程也完全一致恋腕。
5抹锄、提升樹(Boosting Tree)
以決策樹為基函數(shù)的提升方法稱為提升樹。提升樹被認(rèn)為是統(tǒng)計(jì)學(xué)習(xí)中性能最好的方法之一荠藤。
提升樹模型可以表示為決策樹的加法模型:
其中表示決策樹祈远,表示決策樹參數(shù),為樹的個(gè)數(shù)商源。
提升樹算法采用前向分步算法车份。首先確定初始提升樹,第步模型為:
其中為當(dāng)前模型牡彻,通過經(jīng)驗(yàn)風(fēng)險(xiǎn)極小化確定下一棵決策樹參數(shù):
針對(duì)不同問題的提升樹學(xué)習(xí)算法主要區(qū)別在于損失函數(shù)不同扫沼。平方誤差對(duì)應(yīng)回歸問題出爹,指數(shù)損失函數(shù)對(duì)應(yīng)分類問題,一般損失函數(shù)對(duì)應(yīng)一般決策問題缎除。
5.1严就、分類問題的提升樹方法
上面提到,當(dāng)損失函數(shù)為指數(shù)函數(shù)的時(shí)候器罐,提升樹算法可以解決分類問題梢为。我們之前證明了AdaBoost算法是前向分步加法算法的特例,模型是由基分類器組成的加法模型轰坊,損失函數(shù)是指數(shù)函數(shù)铸董。
因此針對(duì)而分類問題,提升樹算法只需將AdaBoost算法中的基分類器限制為二分類決策樹即可肴沫,也就是說此時(shí)提升樹算法是AdaBoost算法的特殊情況粟害。
5.2、回歸問題的提升樹算法
將輸入空間劃分為個(gè)互不相交的區(qū)域颤芬,并在每個(gè)區(qū)域上輸出常量悲幅,則樹可以表示為:
其中參數(shù)表示樹的區(qū)域劃分和各區(qū)域上的常數(shù)。是回歸樹的復(fù)雜度即葉子結(jié)點(diǎn)個(gè)數(shù)站蝠。
當(dāng)采用平方誤差損失函數(shù)時(shí):
其損失為:
這里是當(dāng)前模型擬合數(shù)據(jù)的殘差汰具。
因此對(duì)回歸問題的提升樹算法來說,只需要簡單地?cái)M合當(dāng)前模型的殘差即可菱魔。算法流程如下:
(1)初始化
(2)對(duì)
- 計(jì)算殘差:
- 擬合殘差學(xué)習(xí)一個(gè)回歸樹郁副,得到
- 更新
(3)得到回歸問題的提升樹:
5.3、梯度提升
當(dāng)損失函數(shù)是均方誤差或者指數(shù)函數(shù)的時(shí)候豌习,優(yōu)化是很簡單的,但對(duì)一般形式的損失函數(shù)來說拔疚,往往每一步的優(yōu)化并不那么容易肥隆。梯度提升(Gradient Boosting)算法可以解決這個(gè)問題。其關(guān)鍵是利用損失函數(shù)的負(fù)梯度在當(dāng)前模型的值:
作為回歸問題提升樹算法中的殘差的近似值稚失,擬合一個(gè)回歸樹栋艳。
梯度提升算法流程如下:
(1)初始化:
(2)對(duì):
- a) 對(duì),計(jì)算:
b) 對(duì)擬合一個(gè)回歸樹句各,得到第棵樹的葉結(jié)點(diǎn)區(qū)域
c) 對(duì)吸占,計(jì)算:
- d) 更新
(3)得到回歸樹:
上述算法流程要點(diǎn)如下:第一步初始化只有一個(gè)根結(jié)點(diǎn)的樹。第2(a)步計(jì)算損失函數(shù)的負(fù)梯度在當(dāng)前模型的值凿宾,將其作為殘差的估計(jì)(對(duì)于平方損失函數(shù)這就是殘差矾屯,對(duì)于一般損失函數(shù)這就是殘差的近似值)。第2(b)步估計(jì)回歸樹葉結(jié)點(diǎn)區(qū)域初厚,以擬合殘差近似值件蚕。第2(c)步利用線性搜索估計(jì)葉結(jié)點(diǎn)區(qū)域的值,使損失函數(shù)極小化。第2(d)步更新回歸樹排作。第3步輸出最終模型牵啦。