1. 程式人生 > >《統計學習方法》第八章-提升方法 學習總結

《統計學習方法》第八章-提升方法 學習總結

在《統計學習方法》中第八章提升方法,包括四節,第一節介紹AdaBoost、第二節介紹AdaBoost的誤差、第三節介紹從前向分佈演算法來實現AdaBoost、第四節介紹提升樹。

第一節 提升方法AdaBoost演算法

第一節首先介紹了AdaBoost的思想:是先得到一個弱分類器,然後在這個弱分類器的基礎上將其提升到強分類器,具體方法是提升上一個分類器中被誤分類的樣本的權重,使得本次訓練的分類器更加重視這些樣本,最後的分類器是所有的分類器的線性組合。
它的思想可以類比為秋招季參加了很多面試:第一次面試,面試官給你打了6分,並給你建議說你知識廣度夠,深度不夠;第二次面試前你著重對知識的深度這方面進行了準備,第二次面試面試官給你打了6.5分,並給你建議說你的表達能力有限;第三次面試,你又對錶達能力進行了準備,面試官給你打了7分。三次面試完後,你總結經驗,著重第三次的經驗,因為第三次面試官給你打的分最高。
每一次面試,面試官給你建議就好像是演算法中在該輪沒有被正確分類的樣本點,你開始重視這些建議就好比給這些誤分類的點增加了權值,面試官給你打的分就好比是演算法中該次弱分類器的權值,得分高的面試經驗比得分低的面試經驗更需要你重視。AdaBoost演算法的思想就是這樣,前一次沒有正確分類的樣本點在後一次會被更加重視,前一次的分類器訓練結果是會影響後一次分類器結果的。
AdaBoost先對所有劃分選擇出一個誤分類最小的劃分,得出一個分類器,分類器的權值

am=12log(1emem),樣本的權值也發生更新 wm+1,i=wm,iZmeamyiGm(xi)
也就是說前一次的訓練的結果會被這次的分類器產生影響。
問:AdaBoost演算法每一次訓練的訓練誤差相對於上一輪是不是一定減少?
答:首先區分訓練誤差和訓練誤差率,訓練誤差e=1Ni=1NI(G(xi)yi) 不同於分類誤差率 em=i=1Nwm,iI(Gm(xi)yi) ,被上一輪分類錯誤的樣本增加了它的權值,從而使得下一輪分類器的訓練重視這些被上一輪分類器誤分的樣本,權值更高的樣本更有可能被正確分類,那麼相應的分類誤差率一定減小,訓練誤差不一定減少。
延伸:分類誤差率一定一直減少,那麼樣本權值 a
m
=12log(1emem)
一定一直增加,所以可以確定前一輪的分類器的權值一定小於後一輪的權值,am 一定小於 am+1

第二節 AdaBoost演算法的訓練誤差分析

第二節介紹了AdaBoost的誤差,誤差要用到泰勒公式的知識,具體公式看附加知識中。我們知道訓練誤差率是不斷減少的,那麼訓練誤差也在學習過程中不斷地減少(注意是學習過程中分類器的加法模型的訓練誤差一直減少,而後一個分類器的訓練誤差不一定比前一個分類誤差的訓練誤差小)。訓練誤差是隨著每加權一個弱分類器而減少的,那麼我們要得出訓練誤差

e=1Ni=1NI(G(xi)yi)的性質,就需要使其小於一個值(在這裡是 1N
i
eyif(xi)
),推出後一個值的性質,就可以得出前者的性質,比如後者呈指數形式下降,前者小於後者,那麼它也呈指數下降。同理,如果一個變數是一直增大的,那麼要證明這個變數的性質,就要使其大於一個值,推出這個值得性質就可以得出變數的性質。
問:在第二節中AdaBoost的訓練誤差界的證明中得出,AdaBoost的訓練誤差是以指數速率下降的,和AdaBoost的損失函式是指數函式有什麼聯絡?可不可以得出訓練誤差是以指數速率下降,所以選擇損失函式為指數函式?
答:損失函式的意義是得出模型給出的結果和實際結果的偏離程度,AdaBoost的損失函式選擇指數函式,是因為AdaBoost在第一節處理的是二分類問題,如果處理的是迴歸問題那麼選擇的是均分差損失函式,損失函式的選擇只與處理的問題有關。所以訓練誤差的性質與損失函式的選擇之間沒有聯絡。

第三節 前向分佈演算法與AdaBoost

第三節介紹了前向分佈演算法並從前向分佈演算法的角度來看AdaBoost。首先介紹了前向分佈演算法,前向分佈演算法的目標是訓練一個加法模型

f(x)=m=1Mβmb(x;γm)是從前向後,每一步只學習一個基函式及其係數,而平常的分佈演算法是從m=1到M所有引數 βm,γm 的優化問題簡化為逐次求解各個 βmγm的優化問題,一步一個腳印肯定比一步登天更容易實現,不是嗎?
AdaBoost也可以從前向分佈演算法的角度來看,不過要設定基函式為基本分類器,損失函式為指數損失函式。它的每一輪的分類器的訓練是為了擬合殘差,第一輪是為了擬合樣本資料,後面都是為了擬合殘差。由前向分佈演算法可以推匯出第一節的分類器權值 am 和第m+1輪的樣本權值am+1

第四節 從提升樹到GBDT

第四節介紹了提升樹,提升樹是AdaBoost的特例,可以認為提升樹是基本分類器為二類分類樹,損失函式為平方損失函式的AdaBoost。分類問題的提升樹改變權重,迴歸問題的提升樹擬合殘差。
前向分佈演算法+決策樹(分類樹or迴歸樹)=提升樹
因為損失函式是平方損失函式的時候,殘差是好求的,而如果不是平方損失函式也不是指數損失函式的時候,殘差就不可求得,這時,就要用損失函式關於當前模型f(x)的負梯度來近似代替殘差。梯度提升演算法就是用梯度下降法來講弱分類器提升為強分類器的演算法。
問:提升樹和AdaBoost之間是什麼關係?
答:AdaBoost是提升思想的演算法模型,經典的AdaBoost一般用於分類問題,並沒有指定基函式,或者說是基分類器,它可以從改變樣本的權值的角度和前向分佈演算法的角度來解釋。當確定基函式是迴歸或分類樹時,結合前向分佈演算法就得出提升樹演算法。
使用梯度提升進行分類的演算法叫做GBDT,進行迴歸時則叫做GBRT。一般的提升樹是用殘差來確定樹的葉節點的切分,並根據殘差來確定該切分下的輸出值,而GBDT首先是根據負梯度來確定切分,確定切分後根據線性搜尋估計葉節點區域的值,使損失函式極小化。這就好比是尋找一個全域性極小值,負梯度只給定一個方向,通過線性搜尋確定在該方向下走幾步(該次向北,走20步。。。)線性搜尋的步驟:

cmj=argmincxirmjL(yi,fm1(xi)+c)。所以可以認為偽殘差是隻給出方向的殘差。
GBDT的演算法流程如下:
1)初始化,初始化一個常數值,即只有一個根節點的樹 f0(x)=argminc