1. 程式人生 > >臺灣大學林軒田機器學習技法課程學習筆記8 -- Adaptive Boosting

臺灣大學林軒田機器學習技法課程學習筆記8 -- Adaptive Boosting

上節課我們主要開始介紹Aggregation Models,目的是將不同的hypothesis得到的gt集合起來,利用集體智慧得到更好的預測模型G。首先我們介紹了Blending,blending是將已存在的所有gt結合起來,可以是uniformly,linearly,或者non-linearly組合形式。然後,我們討論了在沒有那麼多gt的情況下,使用bootstrap方式,從已有資料集中得到新的類似的資料集,從而得到不同的gt。這種做法稱為bagging。本節課將繼續從這些概念出發,介紹一種新的演演算法。

Motivation of Boosting

我們先來看一個簡單的識別蘋果的例子,老師展示20張圖片,讓6歲孩子們通過觀察,判斷其中哪些圖片的內容是蘋果。從判斷的過程中推導如何解決二元分類問題的方法。

顯然這是一個監督式學習,20張圖片包括它的標籤都是已知的。首先,學生Michael回答說:所有的蘋果應該是圓形的。根據Michael的判斷,對應到20張圖片中去,大部分蘋果能被識別出來,但也有錯誤。其中錯誤包括有的蘋果不是圓形,而且圓形的水果也不一定是蘋果。如下圖所示:

這裡寫圖片描述

上圖中藍色區域的圖片代表分類錯誤。顯然,只用“蘋果是圓形的”這一個條件不能保證分類效果很好。我們把藍色區域(分類錯誤的圖片)放大,分類正確的圖片縮小,這樣在接下來的分類中就會更加註重這些錯誤樣本。

然後,學生Tina觀察被放大的錯誤樣本和上一輪被縮小的正確樣本,回答說:蘋果應該是紅色的。根據Tina的判斷,得到的結果如下圖所示:

這裡寫圖片描述

上圖中藍色區域的圖片一樣代表分類錯誤,即根據這個蘋果是紅色的條件,使得青蘋果和草莓、西紅柿都出現了判斷錯誤。那麼結果就是把這些分類錯誤的樣本放大化,其它正確的樣本縮小化。同樣,這樣在接下來的分類中就會更加註重這些錯誤樣本。

接著,學生Joey經過觀察又說:蘋果也可能是綠色的。根據Joey的判斷,得到的結果如下圖所示:

這裡寫圖片描述

上圖中藍色區域的圖片一樣代表分類錯誤,根據蘋果是綠色的條件,使得圖中藍色區域都出現了判斷錯誤。同樣把這些分類錯誤的樣本放大化,其它正確的樣本縮小化,在下一輪判斷繼續對其修正。

後來,學生Jessica又發現:上面有梗的才是蘋果。得到如下結果:

這裡寫圖片描述

經過這幾個同學的推論,蘋果被定義為:圓的,紅色的,也可能是綠色的,上面有梗。從一個一個的推導過程中,我們似乎得到一個較為準確的蘋果的定義。雖然可能不是非常準確,但是要比單一的條件要好得多。也就是說把所有學生對蘋果的定義融合起來,最終得到一個比較好的對蘋果的總體定義。這種做法就是我們本節課將要討論的演演算法。這些學生代表的就是簡單的hypotheses

gt,將所有gt融合,得到很好的預測模型G。例如,二維平面上簡單的hypotheses(水平線和垂直線),這些簡單gt最終組成的較複雜的分類線能夠較好地將正負樣本完全分開,即得到了好的預測模型。

這裡寫圖片描述

所以,上個蘋果的例子中,不同的學生代表不同的hypotheses gt;最終得到的蘋果總體定義就代表hypothesis G;而老師就代表演演算法A,指導學生的注意力集中到關鍵的例子中(錯誤樣本),從而得到更好的蘋果定義。其中的數學原理,我們下一部分詳細介紹。

這裡寫圖片描述

Diversity by Re-weighting

在介紹這個演演算法之前,我們先來講一下上節課就介紹過的bagging。Bagging的核心是bootstrapping,通過對原始資料集D不斷進行bootstrap的抽樣動作,得到與D類似的資料集D^t,每組D^t都能得到相應的gt,從而進行aggregation的操作。現在,假如包含四個樣本的D經過bootstrap,得到新的D^t如下:

這裡寫圖片描述

那麼,對於新的D^t,把它交給base algorithm,找出Ein最小時對應的gt,如下圖右邊所示。

Ein0/1(h)=14n=14[yh(x)]

由於D^t完全是D經過bootstrap得到的,其中樣本(x1,y1)出現2次,(x2,y2)出現1次,(x3,y3)出現0次,(x4,y4)出現1次。引入一個引數ui來表示原D中第i個樣本在D^t中出現的次數,如下圖左邊所示。

Einu(h)=14n=14un(t)[ynh(x)]

這裡寫圖片描述

引數u相當於是權重因子,當D^t中第i個樣本出現的次數越多的時候,那麼對應的ui越大,表示在error function中對該樣本的懲罰越多。所以,從另外一個角度來看bagging,它其實就是通過bootstrap的方式,來得到這些ui值,作為犯錯樣本的權重因子,再用base algorithn最小化包含