文章目錄
前沿
在深度學習火起來之前,提升方法(包括AdaBoost, GBDT)是kaggle等比賽中的利器,所以提升方法是必備的知識點。李航《統計學習方法》第8章——提升方法主要內容:AdaBoost, Boosting Tree, GBDT。寫本文章主要目的是複習(畢竟之前看紙質版做的筆記),對於證明比較跳躍和勘誤的地方我都做了註解,以便初學者快速閱讀理解不會卡住。
正文
提升(boosting) 方法是一種常用的統計學習方法, 應用廣泛且 有效。 在分類問題中, 它通過改變訓練樣本的權重, 學習多個分類 器, 並將這些分類器進行線性組合, 提高分類的性能。
本章主要內容
- 提升方法的思路和代表性的提升算法AdaBoost; 通過訓練誤差分析探討AdaBoost爲什麼能夠提高學習精度; 並且從 前向分步加法模型的角度解釋AdaBoost;
- 然後敘述提升方法更具體的 實例——提升樹(boosting tree)和GBDT 。
8.1 提升方法AdaBoost算法
8.1.1 提升方法的基本思路
提升方法的思想
對於一個複雜任務來說, 將多個專 家的判斷進行適當的綜合所得出的判斷, 要比其中任何一個專家單獨 的判斷好。 實際上, 就是“三個臭皮匠頂個諸葛亮”的道理
歷史背景
歷史上, Kearns和Valiant首先提出了**“強可學習(strongly learnable) ”和“弱可學習(weakly learnable) ”的概念。 指出: 在概率近似正確(probably approximately correct, PAC) 學習的框架中, 一 個概念(一個類) , 如果存在一個多項式的學習算法能夠學習它, 並 且正確率很高, 那麼就稱這個概念是強可學習的**; 一個概念, 如果存 在一個多項式的學習算法能夠學習它, 學習的正確率僅比隨機猜測略 好, 那麼就稱這個概念是弱可學習的。 非常有趣的是Schapire後來證 明強可學習與弱可學習是等價的, 也就是說, 在PAC學習的框架下, 一個概念是強可學習的充分必要條件是這個概念是弱可學習的。
這樣一來, 問題便成爲, 在學習中, 如果已經發現了“弱學習算 法”, 那麼能否將它提升(boost) 爲“強學習算法”。 大家知道, 發現 弱學習算法通常要比發現強學習算法容易得多。 那麼如何具體實施提 升, 便成爲開發提升方法時所要解決的問題。 關於提升方法的研究很 多, 有很多算法被提出。 最具代表性的是AdaBoost算法(AdaBoost algorithm) 。
對於分類問題而言, 給定一個訓練樣本集, 求比較粗糙的分類規 則(弱分類器) 要比求精確的分類規則(強分類器) 容易得多。提升方法就是從弱學習算法出發, 反覆學習, 得到一系列弱分類器(又稱 爲基本分類器) , 然後組合這些弱分類器, 構成一個強分類器。
大多數的提升方法都是改變訓練數據的概率分佈(訓練數據的權值分 布) , 針對不同的訓練數據分佈調用弱學習算法學習一系列弱分類器。
提升方法的核心問題和思想
對提升方法來說, 有兩個問題需要回答: 一是在每一輪如 何改變訓練數據的權值或概率分佈; 二是如何將弱分類器組合成一個強分類器。
- 關於第1個問題, AdaBoost的做法是提高那些被前一輪弱分類器錯誤分類樣本的權值, 而降低那些被正確分類樣本的權值。 這樣一來, 那些沒有得到正確分類的數據, 由於其權值的加大而受到後一輪的弱分類器的更大關注。 於是, 分類問題被一系列的弱分類器“分而治之”。
- 至於第2個問題, 即弱分類器的組合, AdaBoost採取加權多數表決的方法。 具體地, 加大分類誤差率小的弱分類器的權值, 使其在表決中起較大的作用, 減小分類誤差率大的弱分類器的權值, 使其在表決中起較小的作用。 AdaBoost的巧妙之處就在於它將這些想法自然且有效地實現在一 種算法裏。
8.1.2 AdaBoost算法