最近學習《西瓜書》的集成學習之Boosting算法,看了一個很好的例子(https://zhuanlan.zhihu.com/p/27126737),為了方便以后理解,現在更詳細描述一下步驟。
AdaBoosting(Adaptive Boosting)算法本質思想如下:
以最大准確率擬合第一個學習器;
第二個需要修正第一個的錯誤:篩選出錯誤並把它們放大;
第三個再修正之前的錯誤;
重復以上步驟,直到學習器數目達事先指定的值,再將這些學習器進行加權結合。
給定數據集如下:
注:
1)y的取值只有1和-1,沒有其他任何值。
准備工作:
現在我們要選一個threshold值使得這個數據集最后的預測結果誤差最小。
比如選threshold =0.5
如果有選擇器規則,所有(x>0.5)都被判定為-1,(x<0.5)都被判定為1 。這樣明顯可以看出x = 1/2/6/7/8都是被預測錯誤,錯誤率達到了0.5 。
按照這樣的方法,來計算出每個threshold對應的錯誤是多少,如下圖:
再如選threshold =0.5
如果有另一個選擇器規則,所有(x<0.5)都被判定為-1,(x>0.5)都被判定為1 。這樣明顯可以看出x = 0/3/4/5/9都是被預測錯誤,錯誤率達到了0.5 。
按照這樣的方法,來計算出每個threshold對應的錯誤是多少,如下圖:
了解這些之后,進入第一輪學習器建立過程。
=第m=1個學習器學習過程:=======================================================
第m=1個學習器學習過程:
w是指每個數據的權重,最開始我們沒有任何信息的時候默認權重一樣,即1/n(n是樣本數據個數)。
錯誤率e1:是由相應的權重之和得到的。
找到錯誤率最小的,顯然當Threshold = 2.5時, 此時x= 6/7/8 出錯,錯誤率e1 = 0.1+0.1+0.1(即權重w之和)。
也即學習器
根據e1計算出學習器系數alpha1 = 0.4236。公式為(機器學習里面的log大部分都是以e為底的對數,也就是ln)
很簡單推導可以得出這個式子中,當(ei<1/2),(alphai>0)是有意義的。
根據以下式子開始推導下一輪的數據權重:
那么我們先算Zm(第一輪學習器的權重跟新總和):在本輪中有三個數據權重需要增大,剩下七個數據權重減小。
Z1 = 0.13exp(alpha1)+ 0.17exp(0-alpha1) = 3exp( 0.4236 ) +7exp(0 - 0.4236)
W10=W11=W12=W13=W14=W15=W19 = 0.1* 3exp(alpha1)/Z1 = 0.13exp(0.4236)/Z1 = 0.07143
W16=W17=W18 = 0.13exp(0 - alpha1)/Z1 = 0.13*exp(0 - 0.4236)/Z1 = 0.16667
更新后的詳細權重如下:
此時更新之后的假設算法和學習器關系為:
根據得到的算法使用最初的數據集發現還是並不能很好地預測出分類,所以還要繼續學習過程
=第m=2個學習器學習過程:=======================================================
顯然在threshold = 8.5時,錯誤率最小,可以得到x = 3/4/5的時候出現了錯誤,錯誤率e2 = 0.07143+0.07143+0.07143 = 0.21429,alpha2 = 0.6496。
此時學習器為
更新權值分布方式如下:
Z2 = 0.0714exp(alpha2 )+0.0714exp(alpha2 )+0.0714exp(alpha2 )+0.0714exp(0 - alpha2 )+
0.0714exp(0 - alpha2 )+0.0714exp(0 - alpha2 )+0.16667exp(alpha2 ) + 0.16667exp(alpha2 )+ 0.16667exp(alpha2 )+0.0714exp(alpha2 )
W20=W21=W22=W29 = 0.0714exp(alpha2 )/Z2 = 0.0455
W23=W24=W25= 0.0714exp(0 - alpha2 )/Z2 = 0.16667
W26=W27=W28 = 0.16667*exp(alpha2 )/Z2 = 0.1060
更新之后的權重如下:
此時更新之后的假設算法和學習器關系為:
注:在(x>8.5)的分段,我認為應該是(0.6496(-1)+0.4236(-1)= --1.0723)但是這里不影響最終的sign[f(x)]結果
根據得到的算法使用最初的數據集發現還是並不能很好地預測出分類,所以還要繼續學習過程
=第m=3個學習器學習過程:=======================================================
顯然在threshold = 5.5時,x =1/2/3/9預測錯誤 ,錯誤率最小e3 = 0.182,alpha3 = 0.7514。
此時的學習器為
然后來繼續更新權值:
Z3=0.0455exp(0 - alpha3 )+0.0455exp(0 - alpha3 )+0.0455exp(0 - alpha3 )+0.16667exp(alpha3 )+0.16667exp(alpha3 )+0.16667exp(alpha3 )+0.1060exp(alpha3 )+0.1060exp(alpha3 )+0.1060exp(alpha3 )+0.0455exp(0 - alpha3 )
W30 = W31=W32= W39 = 0.0455exp(0 - alpha3 )/Z3 = 0.125
W33=W34=W35=0.16667exp(alpha3 )/Z3 = 0.102
W36=W37=W38 = 0.1060*exp(alpha3 )/Z3 = 0.065
更新之后的權重如下:
此時更新之后的假設算法和學習器關系為:
根據得到的算法使用最初的數據集發現可以很好地預測出分類,所以結束學習過程
=以上結束=======================================================
最后擴展內容:
1.Gradient-Boosting
2.在這里我們每個學習器使用的是很簡單的sign函數,事實上,更多使用決策樹來訓練每個基學習器。
3.python實現還沒完成