一 、boosting 演算法的起源
boost 演算法系列的起源來自於pac learnability(pac 可學習性)。這套理論主要研究的是什麼時候乙個問題是可被學習的,當然也會**針對可學習的問題的具體的學習演算法。這套理論是由valiant提出來的,也因此(還有其他貢獻哈)他獲得了2023年的圖靈獎。
pac 定義了學習演算法的強弱
弱學習演算法---識別錯誤率小於1/2(即準確率僅比隨機猜測略高的學習演算法)
強學習演算法---識別準確率很高並能在多項式時間內完成的學習演算法
同時 ,valiant和 kearns首次提出了 pac學習模型中弱學習演算法和強學習演算法的等價性問題,即任意給定僅比隨機猜測略好的弱學習演算法 ,是否可以將其提公升為強學習演算法 ? 如果二者等價 ,那麼只需找到乙個比隨機猜測略好的弱學習演算法就可以將其提公升為強學習演算法 ,而不必尋找很難獲得的強學習演算法。 也就是這種猜測,讓無數牛人去設計演算法來驗證pac理論的正確性。
不過很長一段時間都沒有乙個切實可行的辦法來實現這個理想。細節決定成敗,再好的理論也需要有效的演算法來執行。終於功夫不負有心人,schapire在2023年提出乙個有效的演算法真正實現了這個夙願,它的名字叫adaboost。adaboost把多個不同的決策樹用一種非隨機的方式組合起來,表現出驚人的效能!第一,把決策樹的準確率大大提高,可以與svm媲美。第二,速度快,且基本不用調引數。第三,幾乎不overfitting。我估計當時breiman和friedman肯定高興壞了,因為眼看著他們提出的cart正在被svm比下去的時候,adaboost讓決策樹起死回生!breiman情不自禁地在他的**裡讚揚adaboost是最好的現貨方法(off-the-shelf,即「拿下了就可以用」的意思)。
二、adaboost演算法
adaboost是一種原理簡單,但很實用的有監督機器學習演算法,它是adaptive boosting的簡稱。說到boosting演算法,就不得提一提bagging演算法,他們兩個都是把一些弱分類器組合起來來進行分類的方法,統稱為整合方法(ensemble method),雖然每個弱分類器分類的不那麼準確,但是如果把多個弱分類器組合起來可以得到相當不錯的結果。另外要說的是整合方法還可以組合不同的分類器,而adaboost和boosting演算法的每個弱分類器的型別都一樣的。他們兩個不同的地方是:boosting的每個弱分類器組合起來的權重不一樣,本節的adaboost就是乙個例子,而bagging的每個弱分類器的組合權重是相等,代表的例子就是random forest。random forest的每個弱分類器是決策樹,輸出的類別有多個決策樹分類的類別的眾數決定。在boosting中,不同的分類器是通過序列訓練而獲得的,每個新的分類器根據已經訓練出來的分類器的效能來進行訓練。boosting通過集中關注已有分類器錯分的那些資料來獲得新的分類器。
簡而言之:adaboost 是一種迭代演算法,其核心思想是針對同乙個訓練集訓練不同的弱分類器,然後把這些弱分類器集合起來,構造乙個更強的最終分類器。演算法本身是通過改變資料分布實現的,它根據每次訓練集中的每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改權值的新資料送給下層分類器進行訓練,然後將每次訓練得到的分類器融合起來,作為最後的決策分類器。圖示如下:
左邊矩形表示資料集,中間表示根據特徵閾值來做分類,這樣每乙個弱分類器都類似於乙個單節點的決策樹,其實就是閾值判斷而已,右邊的三角形對每個弱分類器賦予乙個權重,最後根據每個弱分類器的加權組合來判斷總體類別。要注意一下資料集從上到下三個矩形內的直方圖不一樣,這表示每個樣本的權重也發生了變化,樣本權重的一開始初始化成相等的權重,然後根據弱分類器的錯誤率來調整每個弱分類器的全總alpha,如中的三角形所示。分類錯誤率:
alpha 的計算公式:
計算出alpha之後,可以對權重向量d進行更新,以使得那些正確分類的樣本的權重降低而錯誤樣本的權重公升高。d的計算如下:
如果某個樣本被正確分類,那麼該樣本的權重更改為:
如果某個樣本被錯誤分類,那麼該樣本的權重更改為:
在計算出d之後,adaboost又開始下一輪迭代。adaboost會不斷重讀訓練和調整權重,知道訓練錯誤率為0或者弱分類器的個數達到使用者的指定值為止。
完整的adaboost演算法如下:
簡單來說,adaboost有很多優點:
1) adaboost是一種有很高精度的分類器
2) 可以使用各種方法構建子分類器,adaboost演算法提供的是框架
3) 當使用簡單分類器時,計算出的結果是可以理解的。而且弱分類器構造極其簡單
4) 簡單,不用做特徵篩選
5) 不用擔心overfitting!由於adaboost演算法是一種實現簡單,應用也很簡單的演算法。adaboost演算法通過組合弱分類器而得到強分類器,同時
隨著分類器的不斷
增加,訓練誤差的上界會不斷
下降,
不會過擬合等的性質,應該說是一種很適合於在各種分類場景下應用的演算法。
機器學習之AdaBoost
機器學習之adaboost adaboost是一種組合學習的提公升演算法,能將多個弱學習演算法 甚至只比隨機猜測好一點 組合起來,構成乙個足夠強大的學習模型。組合學習是將多個假說組合起來,並整合它們的 比如對於乙個問題,我們可以生成20棵決策樹,讓它們對新樣例的分類進行 最後通過投票決定最終的 這樣...
機器學習之AdaBoost
adaptive boosting 自適應增強 是一種迭代演算法,它的主要思想是 每次迭代調整樣本的權重,並用更新過權重值的資料集訓練下乙個弱學習器,直到達到某個預定的足夠小的錯誤率 或者達到指定的最大迭代次數之後,將各個弱學習器加權組合為最終的強學習器。該演算法每次迭代改變的是樣本的權重 re w...
機器學習實戰 adaboost
adaboost基於錯誤提公升分類器效能 def stumpclassify datamatrix,dimen,threshval,threshineq 根據閾值分類 retarray ones shape datamatrix 0 1 if threshineq lt retarray datam...