機器學習_學習筆記系列(33):自適應增強分類(Adaptive Boost Classifier)
前兩篇我們分別介紹了使用bagging這個方法來解決分類和回歸上的問題,那接下來我們要來看boosting。而boosting又可分adaptive boost和gradient boost,所以在接下來的兩個章節我們要來看adaptive boost在分類和回歸上的應用。
Adaptive Boost
對於adaptive boost這個方法,其是1997年由兩位學者Yoav Freund和Robert Schapire所發明的,其論文[1]名稱叫做:
A decision-theoretic generalization of on-line learning and an application to boosting
而他們所想出來的方法,到現在已經有21k+個引用,甚至在2003年還得到Gödel Prize(非常著名的理論電腦科學獎)。
而adaptive boost的演算法[2],具體來說,我們設我們有一組資料裡面總共有N筆數據,其中x代表輸入資料,y代表輸出資料(標記:為0或1)。在初始化的時候,我們會設定一個參數w,也就是說每筆資料都有對應的w值。而在w=D(i)中,D是自己給定的權重分布,也就是說:
而我們通常會在第一步讓所有的D=1/N。
接下來就是進入我們執行迭代的迴圈。首先我們先把數據帶入,產生一個分類演算法h,其最佳化問題為
接下來,計算我們分類演算法h的錯誤率
然後我們就用這個錯誤率得到我們這一次產生的分類器權重α
然後進而更新我們的參數,若分類正確的話則
若分類錯誤
如此一來,如果分類正確,其權重會減小,反之分類錯誤,其權重會提升。
最後得到新的參數D後,我們回到上面用一樣的方法得到一個新的分類器h,然後以相同方式產生新的分類器權重α和參數D,直到迴圈執行T次結束。
在最後一步中我們將每一步所訓練出的分類器結合產生我們最後的model。
而在adaptive boost演算法的想法中,我們可以看到如果我們每一次迴圈,所產生的h其錯誤率ε如果越接近1代表α越趨近負無限大,反之如果ε如果越接近0代表α越趨近正無限大。
也就是說如果分類錯誤的越多,錯誤的點的權重就會越大,越少則錯誤的點的權重就會越小。
而這樣的方式我們可以把它類比成考試,在第一次考試後,我們知道哪些題目正確哪些錯誤,而Adaptive Boost的精神就是把正確的題目權重減小,錯誤的權重加大,所以下一次考試時,我們會更加專注於錯誤的題目。
而在最後,我們要做的就是把每一次迴圈所得到的α乘上我們每一次所得到的weak classifier加總起來,得到一個strong classifier。而也因為這樣循序漸進的方式,我們也將boosting稱之為Sequential Ensemble Method。
接下來我們實際來看例子,我們運用Decision Stump來作為我們的weak classifier,我們可以看到最後他所得的圖和Decision Tree很像!
Python Sample Code:
Github:
Reference:
[1] Freund, Y., & Schapire, R. E. (1997). A decision-theoretic generalization of on-line learning and an application to boosting. Journal of computer and system sciences, 55(1), 119–139.