本文是機器學習技法系列文章第八篇。介紹了第三種集成學習算法 AdaBoost 的推導過程。
文章目錄
8 Adaptive Boosting
上一節課講了集成學習中的兩種融合模型(Aggregation Models):Blending 和 Bagging。融合模型的意思是說將不同演算法得到的假設函數 通過線性加權或者非線性的方式組合成 ,提高模型的性能。Blending算法是在已知有多個假設函數 ,可以使用 uniform 的形式,即根據投票原則,即一人一票,每票同權,對這些假設函數進行融合。對於二分類問題,現根據該原則計算得分,然後使用sign函數,使結果稀疏;對於迴歸問題,使用該原則對不同假設函數得到的結果進行加權平均。linear 和 non-linear 的形式同理,只不過規則不同。對於linear Blending,其賦予不同的假設函數 不同的權重;對於non-linear Blending,則更進一步,根據不同的規則,進行加權。
以上是已知多個假設函數 的情形,如果沒有,則可以使用拔靴法(bootstrapping)從已知數據集中抽樣出許多不同的數據集,然後在這些數據集上得到不同的假設函數 ,這樣的算法叫做 Bagging,直譯爲裝袋算法。
本節課繼續介紹集成學習算法——Adaptive Boosting(AdaBoost)。
8.1 Motivation of Boosting
首先看一個簡單的例子,引出本節課程要講的內容:
假設老師要教六歲的小朋友(六小lin…兒童?)識別蘋果,首先給小朋友們看了許多圖片,並告訴大家哪些是蘋果,哪些不是蘋果,然後讓大家說出應該怎樣分辨蘋果。
老師首先提問了 Michael ,他看了之後說:應該以是否爲圓形區分蘋果,如果是圓形就是蘋果。很顯然這樣是有問題的,因爲比如橘子、桃子、檸檬、西紅柿等等也是圓形,說明這個判別標準很容易犯錯。
接下來,老師繼續引導這些小朋友,然後讓小朋友們修正判斷準則。
首先,老師將不符合判斷標準的圖片方法,也就將是圓形,但不是蘋果的圖片放大,將符合標準的圖片縮小;然後,告訴小朋友們這些是圓形,但並不是蘋果。然後,讓小朋友們繼續判斷。然後老師提問了 Tina 小朋友,她回答說:蘋果應該是紅色的。很顯然這也是不對的,然後老師將紅色西紅柿和綠色的蘋果放大給小朋友們看,並說:紅色不一定是蘋果,比如西紅柿;蘋果也不一定只有紅色,比如綠色的蘋果。可以看出,老師的任務就是指出判別標準中不完美的地方,然後引導小朋友們做修正。
通過 Michael 和 Tina 兩位小朋友的判斷,現在已經有兩條不太一樣的規則用來判斷是否爲蘋果。此時,讓小朋友們繼續做判斷,大家可能會有不一樣的意見。
老師提問了 Joey,他回答說:蘋果也可以是綠色的!於是,老師將是蘋果但不是綠色的蘋果標了出來,此時就是在這條規則下犯的錯誤。
然後老師提問了 Jessica,她回答說:蘋果是圓形的,可能是綠色也可能是紅色,並且有梗(stem,把兒)。
可以看出,此時的判斷標準已經幾乎不犯的錯誤。
更一般地,將以上提到的概念,轉換成數學表示有:
這些不同的小朋友提出的判斷標準就代表一些簡單的假設函數 ,在上圖中就是灰色的線。將這些假設函數融合就是簡單融合模型的假設函數 ,也就是圖中黑色的線。可以看出,黑色的線分類效果更好,可以將正負兩類樣本分開。
上例中的老師就是演算法Adaptive Boosting,他讓學生在找出 的過程中,專注於犯錯誤的樣本上面。將這些犯錯的樣本稱爲 key example。
習題1:
8.2 Diversity by Re-weighting
Bagging 的核心是 Booststraping,使用 Bootstrap 在原數據集 上進行抽樣(有放回,可重複抽樣),得到與原數據集類似的一個個小的數據集 。使用不同的演算法在這些小的數據集上訓練,得到不同的假設函數 。 Bootstrapping 通過 Re-weighting 處理得到 的方法流程如下:
首先在數據集 中使用拔靴法抽樣,假設抽得的子數據集爲 ,然後通過最小化目標函數 ,得到對應的假設函數 。爲了實現加權,也就是類似投票的動作。引入參數 ,表示第 次抽樣中,包含樣本 的個數。此時,得到加權後的目標函數 。
其實,可以通過另一個角度看待Bagging的核心思想,它其實是通過拔靴法產生不同的 ,也就是相當於權重,然後在基本的目標函數中添加該權重係數進行加權,表示每個樣本犯錯誤的程度,得到目標函數。最後,通過最小化該目標函數,得到 。注意這裏的權重表示對樣本進行加權,表示更注重哪個樣本,在最小化目標函數時,應該更注重這些點。
以上就是拔靴法得到 的方法。上文提到的算法稱爲 Weighted Base Algorithm。在不平衡分類問題中,通過權重對樣本進行加權來平衡樣本數量或者分類數,是一種比較好的解決方案。接下來看看這種算法如何使用。
如果將SVM算法的目標函數乘以權重 ,可以看出經過二次規劃求解之後,添加的權重 最終會添加到拉格朗日乘子的上限。如果在邏輯迴歸的目標函數中添加權重 ,可以將其當做抽樣的比例。現在的問題是如果基本的演算法(base algorithm)可以根據不同的權重 決定那些樣本可以影響假設函數 的計算,應該如何改變權重,讓假設函數越不一樣越好。在上一節課程中提到, 越不一樣,融合模型的性能越好。應該如何得到不一樣的 呢?
如圖所示, 與 相關,, 與 相關。如果 在第 次取樣得到的數據集上表現不好,則可以推出:
- 下一輪得到的假設函數 不會選到 以及與之相似的假設函數;
- 與 有很大的不同。
那麼表現很差怎麼度量?一個思路是將這個衡量轉化爲好壞兩種情況,每種情況的概率爲0.5,如果假設函數 在第 次取樣的樣本數據集上的表現接近0.5,表明這個假設函數在新的樣本上的表現好壞程度是一樣的,說明沒啥用,就像拋硬幣一樣,具有隨機性。這樣就能最大限度的保證 與 有很大的不同。
那麼如何得到最佳的 Re-weighting呢?其推導過程如下:
首先對公示中的符號做了標記。其中,橙色方塊表示第 次採樣時,犯錯誤樣本的數量;綠色圓圈表示第 次採樣時,未犯錯誤樣本的數量。
要讓上式儘可能的逼近0.5,只需要將 在第 次取樣上的表現犯錯和未犯錯的數量相等即可,即想辦法將兩個權重(犯錯和未犯錯)在一輪中調成相同的。有兩種方法可以實現:
- 借鑑第一題小節放大和縮小的思想,將未犯錯的縮小,將犯錯的放大。
- 第二種方法是乘以犯錯率和正確率,未犯錯的乘以錯誤率 ,犯錯的乘以正確率(。
這樣,原來的 在新的一輪訓練中的表現就會非常差,也就不會被基本的演算法選出來。因此也就保證了每次得到的 的差異性,從而得到更好的融合模型。
習題2:
因爲在下一輪中,錯誤點會比正確點的變成三倍重要。
8.3 Adaptive Boosting Algorithm
對上一小節的錯誤率做放縮:
對於犯錯的乘以 ,對於未犯錯的除以 。這種縮放後的縮放因子所實現的功能與之前未放縮的是一樣的。這種操作的物理意義是說:放大犯錯的樣本,縮小未犯錯的樣本;拿第一小節中判斷蘋果的例子來說,表示更關注分類錯誤的樣本,然後着重去修正錯誤。這類似於PLA,逐步修正錯誤的思想。通過以上方法,將錯誤的樣本放大,正確的樣本縮小,就能夠保證得到不一樣的假設函數。應該如何計算呢?
注意,這裏爲了保證第一次計算的目標函數 最小,將樣本權重的初始值 。在計算 的同時,計算係數 ,最後求解出融合模型的假設函數 。錯誤率 時,誤差很大,,意味着此時的假設函數 沒啥用,所以權重設爲零;當錯誤率 時,沒有誤差,,意味着此時的假設函數 很有用,所以權重設爲無窮。
以上這種算法就是 Adaptive Boosting(AdaBoost) ,它包含三個部分:
其完整的算法流程如下:
有些中文文獻中,稱其爲“皮匠法”(三個臭皮匠賽過諸葛亮),常用還是AdaBoost。下面看一下AdaBoost理論上的保證:
其中, 表示模型複雜度, 表示假設函數 的VC Dimention, 表示迭代次數。
不等式中的第一項 當錯誤率 滿足條件 時,經過 次迭代訓練之後, 。第二項 在 次迭代過程中 變化不大。如此,可以使得 很小。
習題3:
8.4 Adaptive Boosting in Action
在之前的機器學習課程作業中提到了 decision stump算法,它的物理意義是使用水平或者豎直的直線分割輸入空間進行分類。可想而知,這樣的分類器的分類效果是不好的,可以將其與Adaptive Boosting 結合使用,提高分類能力。看一個簡單的例子:
原始的數據集是二維空間中的二分類樣本。Adaptive Boosting 算法的第一步是將這些樣本當做一樣,然後使用decision stump 隨機的切分(水平或者垂直方向)。如下圖所示
發現右邊的藍色圈圈被錯誤的分爲了負類,因此要重點關注這些分類錯誤的樣本點,也就是說要乘以比較大的權重 。其它的被分類正確的樣本點將其縮小。然後使用decision stump 切分,得到如下結果:
發現負類被分爲了正類,因此將這些分類錯誤的紅色叉叉乘以比較大的權重,表示更注重這些分類錯誤的樣本。再次做劃分:
發現仍然存在錯誤的樣本點,將其方法,然後進一步切分:
再次做切分:
經過五次切分,就得到了比較複雜的分類邊界,並且可以將樣本分割開。整個過程如下:
如果數據集更復雜呢?
其實是一樣的,只不過需要做 decision stump 的次數更多。可以看出 AdaBoost-Stump是一個非線性模型。相比於Kernel SVM,更加有效率,這也是集成學習模型的優勢。該算法還可以用用於實時人臉檢測:
可以看出,AdaBoost-Stump 可以高效地選擇和融合特徵。
習題4:
Summary
本節課介紹了集成學習的第三種模型——Adaptive Boosting(AdaBoost)。第一小節通過一個簡單的教小朋友識別蘋果的例子引出了該模型的算法流程。其核心思想是,每一輪重新賦予不同的假設函數 不同的權重,把錯誤的權重提高得到儘可能不同的假設函數 ,最後通過權重 將這些不同的 進行加權組合,得到融合模型的假設函數 。最後通過加入 decision stump 算法,可以實現實時的提取和融合特徵。
講到這裏,我們知道 Bagging是uniform aggregation;AdaBoost 是 linear aggregation;下一節介紹 conditional aggregation 算法——Decision Tree。