整合學習之boosting,Adaboost、GBDT 和 xgboost(一)
在前面的部落格(https://blog.csdn.net/qq_16608563/article/details/82878127)
介紹了整合學習的bagging方法及其代表性的隨機森林。此次接著介紹整合學習的另一個方法boosting以及boosting系列的一些演算法,具體包括 Adaboost、GBDT和xgboost
boosting(提升)方法是一種常用的統計學習方法,應用廣泛且有效。在分類問題中
,它通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類的效能。與bagging不同的是,各個預測函式只能順序生成,因為後一個模型引數需要前一輪模型的結果。
提升方法AdaBoost演算法
提升演算法的基本思想:對於一個複雜的任務來說,將多個分類器的判斷進行適當的綜合得出的判斷,要比任何一個分類器單獨判斷的結果要好。
強可學習與弱可學習:在概率近似正確的學習框架中(PAC),一個概念,如果存在一個多項式的學習演算法可以學習它,並且正確率很高,那麼稱這個概念是強可學習的。
如果存在一個多項式的學習演算法可以學習它,但學習的正確率僅僅比隨機猜測略好,那麼這個概念是弱可學習的。
結論:在PAC學習的框架下,一個概念是強可學習的充分必要條件是這個概念是弱可學習的。
那麼問題來了,如果已經發現了“弱學習演算法”,那麼是否可以將它提升為“強可學習演算法”
(弱學習演算法是比較容易發現的)
提升方法就是從弱學習演算法出發,反覆學習,得到一系列弱分類器(又稱為基本分類器),然後組合這些弱分類器,構成一個強分類器。
大多數的提升方法都是改變訓練資料的概率分佈(訓練資料的權值分佈),針對不同的訓練資料分佈呼叫弱學習演算法學習一系列的弱分類器。
這樣,對於提升方法來說,有兩個問題需要回答:
1)在每一輪如何改變資料的權值(訓練樣本的權重)或概率分佈
2)如何將弱分類器組合成一個強分類器。
AdaBoost(Adaptive Boost):自適應提升
AdaBoost巧妙而自然的回答了以上的2個問題並把他們完美的融合在了一個演算法中。
針對第一個問題,AdaBoost的做法是:**提高那些被前一輪弱分類器錯誤分類樣本的權值,而降低那些被正確分類樣本的權值。**這樣一來,那些沒有被正確分類的樣本,由於其權值的加大而受到後一輪弱分類器的更大關注。
針對第二個問題:即弱分類器的組合,AdaBoost採取加權多數表決的方法。具體的加大分類誤差率小的弱分類器的權重,使其在表決中起較大作用,減小分類誤差率大的弱分類器的權重,使其在表決中起較小的作用(體現在弱分類器的權重 與分類誤差率 的關係式 )後面詳解。
AdaBoost演算法:
輸入:訓練資料集
弱學習演算法
輸出:最終分類器G(x)
針對這個演算法我想這樣來學習:先縱向看,再橫向看,怎麼講?往下看
首先縱向看:看什麼?看順序,即演算法流程,先算什麼後算什麼,引數是如何聯絡與推導的?
1)初始化訓練資料的權值分佈(提升方法的2個問題中的第一個問題)
其中
縱向看:演算法的第一步是初始化了一個訓練資料的權重向量
**
橫向看:向量的每一個元素對應著一個訓練樣本的權重
:其中1 代表是訓練的輪數,i代表這一輪的第i個樣本的權重。
還有這個權重向量在每一輪都會進行更新(所以才叫自適應啊,講究),如何更新見下面的步奏。
2)對 m=1,2…M (這個是訓練的輪數,也是弱分類器的個數)
(a)有了權重向量了
以後,在原始的訓練資料上結合權重向量
以及弱學習演算法,就可以得到基本分類器了
(b) 有了基本分類器
之後,我們可以計算這個弱分類器
在訓練資料集上的分類誤差率
其實,弱分類器 在加權的訓練資料集上的分類誤差率是被 誤分類樣本的權值之和。**
(c)誤分類率
出來了,就可以使用它來計算弱分類器的權重了(前面說了分類效果不好的權重要低點)