Adaboost(自适应提升树)算法原理
生活随笔
收集整理的這篇文章主要介紹了
Adaboost(自适应提升树)算法原理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.Adaboost概述
Adaboost的前身的Boosting算法。Boosting是一種提高任意給定學習算法準確度的方法。它的思想起源于Valiant提出的PAC(Probably Approximately Correct)學習模型。Valiant和Kearns提出了弱學習和強學習的概念,識別錯誤率小于1/2,也即準確率僅比隨機猜測略高的學習算法稱為弱學習算法;識別準確率很高并能在多項式時間內完成的學習算法稱為強學習算法。同時,Valiant和Kearns首次提出了PAC學習模型中弱學習算法和強學習算法的等價性問題,即任意給定僅比隨機猜測略好的弱學習算法,是否可以將其提升為強學習算法?如果二者等價,那么只需找到一個比隨機猜測略好的弱學習算法就可以將其提升為強學習算法,而不必尋找很難獲得的強學習算法。
1990年, Schapire最先構造出一種多項式級的算法,對該問題做了肯定的證明,這就是最初的Boosting算法。一年后,Freund提出了一種效率更高的Boosting算法。但是,這兩種算法存在共同的實踐上的缺陷,那就是都要求事先知道弱學習算法學習正確率的下限。
1995年, Freund和schapire改進了Boosting算法,提出了AdaBoost(Adaptive Boosting)算法,該算法效率和Freund于1991年提出的Boosting算法幾乎相同,但不需要任何關于弱學習器的先驗知識,因而更容易應用到實際問題當中。之后,Freund和schapire進一步提出了改變Boosting投票權重的AdaBoost.M1, AdaBoost.M2等算法,在機器學習領域受到了極大的關注。 Adaboost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。
其算法本身是通過改變數據分布來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改過權值的新數據集送給下層分類器進行訓練,最后將每次訓練得到的分類器最后融合起來,作為最后的決策分類器。使用adaboost分類器可以排除一些不必要的訓練數據特征,并將關鍵放在關鍵的訓練數據上面。
這就是Adaboost的結構,最后的分類器YM是由數個弱分類器(weak classifier)組合而成的,相當于最后m個弱分類器來投票決定分類,而且每個弱分類器的“話語權”α不一樣。
?2.理論推導
這里闡述下算法的具體過程:
?1.初始化所有訓練樣例的權重為1 / N,其中N是樣例數
?2.for m=1,……M:
- 訓練弱分類器ym(),使其最小化權重誤差函數(weighted error function):
- 接下來計算該弱分類器的話語權α:
- 更新所有訓練樣例的權重:
其中Zm:
是規范化因子,使所有w的和為1。
3.得到最后的分類器:
3.如何理解Adaboost是一種“集弱成強”的分類器
可以看到整個過程和最上面那張圖一樣,前一個分類器改變權重w,同時影響后面的分類器。如果一個訓練樣例,在前一個分類器中被誤分,那么它的權重會被加重,因此,被正確分類的樣例的權重會降低。這就使得下一個分類器,會更在意被誤分的樣例,那么其中那些α和w的更新是怎么來的呢?下面我們從前項分步算加法模型的角度來看看Adaboost:
直接將前項分步加法模型具體到adaboost上:
其中 fm是前m個分類器的結合:
?此時我們要最小化E,同時要考慮α和yi,但現在我們假設前m-1個α和y都已經fixed了,那么:
其中,
可以被看做一個常量,因為它里面沒有αm和ym.
接下來:
其中Tm表示正分類的集合,Mm表示誤分類的集合,這一步其實就是把上面那個式子拆開,沒什么復雜的東西.然后就是找ym了,就是最小化下式的過程,其實就是我們訓練弱分類器.
有了ym,α也就可以找了,然后繼續就可以找到更新w的公式了(注意這里得到的w公式是沒有加規范化因子Z的公式,為了計算方便我們加了個Z進去).因為這里算出來直接就是上面過程里的公式,就不再贅述了,有興趣可以自己算一算.
4.參考資料
[1]http://blog.csdn.net/dark_scope/article/details/14103983 [2]《統計學習方法》總結
以上是生活随笔為你收集整理的Adaboost(自适应提升树)算法原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KNN(K-Nearest Neighb
- 下一篇: 小波变换理解:消失矩、支撑长度的理解