1. 程式人生 > >【統計學習方法-李航-筆記總結】八、提升方法

【統計學習方法-李航-筆記總結】八、提升方法

本文是李航老師《統計學習方法》第八章的筆記,歡迎大佬巨佬們交流。

主要參考部落格:

https://www.cnblogs.com/YongSun/p/4767513.html

主要內容包括:

1. 提升方法AdaBoost演算法

2. AdaBoost演算法的訓練誤差分析

3. AdaBoost演算法的解釋

4. 提升樹

 

1. 提升方法AdaBoost演算法

    提升(boosting)方法是一種常用的統計學習方法,應用廣泛且有效。在分類問題中,它通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類的效能。

(1)提升方法的基本思路

    基本思想:對於分類問題而言,給定一個訓練樣本集,求比較粗糙的分類規則(弱分類器)要比求精確的分類規則(強分類器)容易得多。提升方法就是從弱學習演算法出發,反覆學習,得到一系列弱分類器(又稱為基本分類器),然後組合這些弱分類器,構成一個強分類器。大多數的提升方法都是改變訓練資料的概率分佈(訓練資料的權值分佈),針對不同的訓練資料分佈呼叫弱學習演算法學習一系列弱分類器。

    提升方法需要回答的兩個問題:一是在每一輪如何改變訓練資料的權值或概率分佈;二是如何將弱分類器組合成一個強分類器。

    AdaBoost

是提升方法的一個代表,它對上述兩個問題的做法是:關於第1個問題,提高那些被前一輪弱分類器錯誤分類樣本的權值,而降低那些被正確分類樣本的權值。這樣一來,那些沒有得到正確分類的資料,由於其權值的加大而受到後輪的弱分類器的更大關注。於是,分類問題被一系列的弱分類器“分而治之”;對於第2個問題,即弱分類器的組合,AdaBoost採取加權多數表決的方法。具體地,加大分類誤差率小的弱分類器的權值,使其在表決中起較大的作用,減小分類誤差率大的弱分類器的權值,使其在表決中起較小的作用。

(2)AdaBoost演算法

    現在敘述AdaBoost演算法,給定一個二分類的訓練資料集

,X是例項空間,Y是標記集合,AdaBoost利用以下演算法,先用訓練資料學習一個弱分類器,然後將其線性組合為一個強分類器:

    

    

    對上述步驟做如下說明:

    步驟(1)是分別給每個樣本加了權重,假設訓練資料集具有均勻的權值分佈,即每個訓練樣本在基本分類器的學習中作用相同,這保證了第一步能夠在原始資料上學習基本分類器G1(x)。

   步驟(2)AdaBoost反覆學習基本分類器,在每一輪m = 1,2,...,M順次進行下列操作:

    (a)使用當前分佈Dm加權的訓練資料集,學習基本分類器Gm(x); 

    (b) 計算基本分類器Gm(x)在加權訓練資料集上的分類誤差率:,這裡,\sum w_{mi} = 1,Wmi代表第m輪中第i個例項的權值,Gm(x)在加權的訓練資料集上的分類誤差率是Gm(x)誤分類樣本的權值之和,由此可以看出資料權值分佈Dm與基本分類器Gm(x)的分類誤差率的關係。

   (c)計算基本分類器Gm(x)的係數αm,αm表示Gm(x)在最終分類器中的重要性。由計算公式可知,當em<=1/2時,αm>=0,並且αm隨著em的減小而增大,所以分類誤差率越小的基本分類器在最終分類器中的作用越大。

   (d) 更新訓練資料的權值分佈為下一輪作準備,式(8.4)可以寫成

    

    由此可知,被基本分類器Gm(x)誤分類樣本的權值得以擴大,而被正確分類樣本的權值卻得以縮小。.兩相比較,誤分類樣本的權值被放大。因此,不改變所給的訓練資料,而不斷改變訓練資料權值的分佈,使得訓練資料在基本分類器的學習中起不同的作用,這是AdaBoost的一個特點.

    步驟(3)  線性組合f(x)實現了M個基本分類器的加權表決,所有係數αm之和並不為1,f(x)的符號決定例項x的類,f(x)的絕對值表示分類的確信度。利用基本分類器的線性組合構建最終分類器是AdaBoost的另一特點。

    對於AdaBoost演算法的示例如下:

    

    

2. AdaBoost演算法的訓練誤差分析

    AdaBoost最基本的性質是它在學習的過程中不斷減少誤差,有定理如下:

    AdaBoost的訓練誤差界:AdaBoost演算法最終分類器的訓練誤差界為

    

    這一定理說明,可以在每一輪選取適當的Gm使得Zm最小,從而使訓練誤差下降最快。

    二類分類問題AdaBoost的練誤差界:

    

    這裡,γm=1/2 - em

    推論:如果存在γ>0,對所有m有γm>=γ,則

    

    這表明在此條件下AdaBoost的訓練誤差是以指數速率下降的。

    注意,AdaBoost演算法不需要知道下界γ。AdaBoost具有適應性,即它能適應弱分類器各自的訓練誤差率。AdaBoost的訓練誤差分析表明,AdaBoost的每次迭代可以減少它在訓練資料集上的分類誤差率,這說明了它作為提升方法的有效性。

3. AdaBoost演算法的解釋

    AdaBoost還有另一個解釋,即可以認為AdaBoost演算法是模型為加法模型、損失函式為指數函式、學習演算法為前向分步演算法時的二類分類學習方法。

(1)前向分步演算法

    加法模型:

    

    其中,b為基函式,γ為基函式的引數,β為基函式的係數。

    在給定訓練資料以及損失函式L(y,f(x)),學習加法模型f(x)成為經驗風險極小化即損失函式極小化問題:

    

    前向分步演算法求解這一問題的思想是:如果能夠從前向後,每一步只學習一個基函式及其係數,逐步逼近上述優化目標函式,那麼就可以簡化優化的複雜度,具體地,每步只需優化損失函式:。演算法描述如下:

    這樣,前向分步演算法將同時求解從m=1到M的所有引數βm,γm的優化問題簡化為逐次求解各個βm,γm的優化問題。

(2)前向分步演算法與AdaBoost

    由前向分步演算法可以推匯出AdaBoost,定理如下:

    AdaBoost演算法是前向分步加法演算法的特例,這時,模型是由基本分類器組成的加法模型,損失函式是指數函式。

    前向分步演算法與AdaBoost是等價的。

4. 提升樹

    提升樹是以分類樹或迴歸樹為基本分類器的提升方法,提升樹被認為是統計學習中效能最好的方法之一。

(1)提升樹模型

    提升方法實際採用加法模型(即基函式的線性組合)與前向分步演算法。以決策樹為基函式的提升方法稱為提升樹(boosting tree)。對分類問題決策樹是二叉分類樹,對迴歸問題決策樹是二叉迴歸樹。基本分類器x<v或x>v,可以看作是由一個根結點直接連線兩個葉結點的簡單決策樹,即所謂的策樹樁(decision stump)。提升樹模型可以表示為決策樹的加法模型:

    

其中,T表示決策樹,Θ為決策樹的引數,M為樹的個數。

(2)提升樹演算法

    提升樹演算法採用的是前向分步演算法,首先確定初始提升樹f0(x) = 0,第m步的模型是:

    

    其中,為當前模型,通過經驗風險極小化確定下一棵決策樹的引數Θm,

    由於樹的線性組合可以很好地擬合訓練資料,即使資料中的輸入與輸出之間的關係複雜也是如此,所以提升樹是一個高功能的學習演算法。

    對於不同問題,提升樹學習演算法使用的損失函式不同,如迴歸問題使用平方誤差損失函式,分類問題使用指數損失函式,一般決策問題使用一般損失函式。

    迴歸問題的提升樹演算法:已知一個訓練資料集,X為輸入空間,Y為輸出空間,如果將輸入空間X劃分為J個互不相交的區域R1,R2,...,Rj,並在每個區域上確定輸出的常量cj,那麼樹可以表示為:

    其中,引數表示數的區域劃分和各區域上的常數,J是迴歸樹的複雜度即節點個數。

    迴歸問題提升樹使用一下前向分步演算法:

    

    在前向演算法的第m步,給定當前模型f_{m-1}(x),需求解:,即第m棵樹的引數。

    當採用平方誤差損失函式時:

    其損失變為:,其中,是當前模型擬合數據的殘差。

    所以,對於迴歸問題的提升樹演算法來說,只需簡單地擬合當前模型的殘差。演算法描述如下:

    

    

(3)梯度提升

    提升樹利用加法模型與前向分步演算法實現學習的優化過程。當損失函式是平方損失和指數損失函式時。每一步優化是很簡單的。但對一般損失函式而言,往往每一步優化並不那麼容易。針對這一問題,Freidmao提出了梯度提升(gradient boosting)演算法。這是利用最速下降法的近似方法,其關鍵是利用損失函式的負梯度在當前模型的值:

    

作為迴歸問題提升樹演算法中的殘差的近似值,擬合一個迴歸樹。梯度提升演算法描述如下:

    

    演算法第1步初始化,估計使損失函式極小化的常數值,它是隻有一個根結點的樹,即 x>c 和 x<c;

    第2 (a)步計算損失函式的負梯度在當前模型的值,將它作為殘差的估計。對於平方損失函式,它就是通常所說的殘差;對於一般損失函式,它就是殘差的近似值。

    第2 (b)步估計迴歸樹葉結點區域,以擬合殘差的近似值

    第2 (c)步利用線性搜尋估計葉結點區域的值,使損失函式極小化

    第2 (d)步更新迴歸樹。

    第3步得到輸出的最終模型。

最後做一點延伸,AdaBoost是整合學習中Boosting的典型方法,整合學習還有Bagging方法,二者的比較請參考部落格:

演算法流程圖角度的對比:https://blog.csdn.net/ice110956/article/details/10077717

公式層面的對比:https://blog.csdn.net/sinat_22594309/article/details/60957594

面試級優缺點的對比:https://blog.csdn.net/qq_28031525/article/details/70207918?utm_source=blogxgwz0