當前位置:
首頁 > 最新 > Adaboost演算法及python實戰

Adaboost演算法及python實戰

之前在寫隨機森林的時候大概介紹過boosting演算法,今天重點聊一下


Adaboost

AdaBoost是最著名的Boosting族演算法,同樣也是數據挖掘10大演算法之一。是一種迭代演算法,其核心思想是針對同一個訓練集訓練不同的分類器,即弱分類器,然後把這些弱分類器集合起來,構造一個更的最終分類器。演算法本身是改變數據分布實現的,它根據每次訓練集之中的每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改權值的新數據送給下層分類器進行訓練,然後將每次訓練得到的分類器融合起來,作為最後的決策分類器。

開始時,所有樣本的權重相同,訓練得到第一個基分類器。從第二輪開始,每輪開始前都先根據上一輪基分類器的分類效果調整每個樣本的權重,上一輪分錯的樣本權重提高,分對的樣本權重降低。之後根據新得到樣本的權重指導本輪中的基分類器訓練,即在考慮樣本不同權重的情況下得到本輪錯誤率最低的基分類器。重複以上步驟直至訓練到約定的輪數結束,每一輪訓練得到一個基分類器。

可以想像到,遠離邊界(超平面)的樣本點總是分類正確,而分類邊界附近的樣本點總是有大概率被弱分類器(基分類器)分錯,所以權值會變高,即邊界附近的樣本點會在分類時得到更多的重視。

下面我們說一下Adaboost的演算法,主要參考李航《統計學習方法》

我們用書中的一組數據來進行實際計算下,方便大家了解演算法:

數據集D共有10條數據,根據x的輸入得到的y可以分類兩類,即y=1與y=-1。我們每一輪使用最簡單的決策樹樁來構建基分類器,即每輪設定一個閾值θ,只要xθ就判定為負類(y=-1)。(或者只要xθ就判定為負類(y=1))

第一輪

D1(x)

因為是第一輪,故所有樣本的權重相同1/10(0.1):

D1(x? )=

最終要選擇一個令?1取得最小值的θ與分類方法,這9個值在兩種分類方法下,此層g1的錯誤率分別為:

α1

第一層基分類器G1的權重α1:

α1=1/2*log(1??1)/?1=0.4236

第二輪

D2(x)

第一輪訓練完成後對D1(x)進行更新得到D2(x),更新公式的推導過程也是等到後邊的推到部分再說,此處還是只要知道通過下邊的公式來計算更新即可:

上一輪中x=6、7、8的點分錯了,可以看到這三個點在D2中的權重變大了,而其餘分類正確的點權重變小了。

整個模型(現在有兩個基分類器)的準確率仍然為:P(D)=0.7

第三輪

D3(x)

使用D2(x)更新得到D3(x)如下:

D3(x)=

上一輪中x=3、4、5的點被分錯,所以在D3中的權重變大,其餘分類正確的點權重變小。

依然使用如下公式進行計算:

α3=1/2*log(1??1)/?1=0.752

繼續根據如下公式計算G(x),此時T為3:

G(x)=

sign(G(x))=

整個模型(現在有三個基分類器)的準確率為:P(D)=1

至此,我們只用了3個弱(基)分類器就在樣本集D上得到了100%的準確率,總結一下:

?在第t輪被分錯的樣本,在下一輪更新得到的Dt+1(x)中權值將被增大

?在第t輪被分對的樣本,在下一輪更新得到的Dt+1(x)中權值將被減小

?所使用的決策樹樁總是選取讓錯誤率?t(所有被Gt分類錯誤的樣本在Dt(x)中對應的權值之和)最低的閾值來設計基本分類器

?最終Adboost得到的G(x)為:

sign(H(x))=sign(0.4236?g1+0.6496?g2+0.752?g3)

接下來我們用SKlearn裡面的例子來看下效果(python用anaconda進行展示):

從結果看AdaBoost準確性不是最高的,當然這也與樣本有關,大家也可以根據自己的需要選擇合適的模型。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 不懂亂問 的精彩文章:

極端隨機森林
集成演算法與隨機森林

TAG:不懂亂問 |