AdaBoost演算法 強分類器訓練過程

2021-09-22 09:55:31 字數 1648 閱讀 3655

初始化權重:負樣本權重w0i= 1/2m, 正樣本權重w1i = 1/ 2l,其中m為負樣本總數,l為正樣本總數;

對於t = 1, ... t(t為訓練次數):

權重歸一化,簡單說就是使本輪所有樣本的權重的和為1;

根據每乙個特徵訓練簡單分類器,僅使用乙個特徵;

從所有簡單分類器中選出乙個分錯率最低的分類器,為弱分類器;

更新權重

def adaboosttrainds(dataarr,classlabels,numit=40): 

weakclassarr = #

存放強分類器的所有弱分類器資訊

m =shape(dataarr)[0]

d = mat(ones((m,1))/m) #

權重初始化

aggclassest = mat(zeros((m,1)))

for i in

range(numit):

beststump,error,classest = buildstump(dataarr,classlabels,d)#

根據訓練樣本、權重得到乙個弱分類器

print"d:

",d.t

alpha = float(0.5*log((1.0-error)/max(error,1e-16)))#

計算alpha值,該值與分錯率相關,分錯率越小,該值越大,弱分類器權重

#max(error,1e-16)用於確保錯誤為0時不會發生除0溢位

beststump['

alpha

'] =alpha

#儲存該弱分類

print

"classest:

",classest.t

expon = multiply(-1*alpha*mat(classlabels).t,classest)

d = multiply(d,exp(expon)) #

重新計算樣本權重

d = d/d.sum() #

歸一化#

計算當前強分類器的分錯率,達到預期要求即停止

aggclassest += alpha*classest

print

"aggclassest:

",aggclassest.t

aggerrors = multiply(sign(aggclassest) != mat(classlabels).t,ones((m,1))) #

計算資料點哪個是錯誤

print

'aggerrors:

',sign(aggclassest) !=mat(classlabels).t

print

'aggerrors:

',aggerrors

errorrate = aggerrors.sum()/m #

計算錯誤率

print

"total error:

",errorrate

if errorrate == 0.0: break

return weakclassarr

,利用強分類器計算結果如下:

-0.34657359027997275

,利用強分類器計算結果如下:

+0.34657359027997275

AdaBoost演算法 強分類器訓練過程

演算法原理如下 參考自viola p,jones m.robust real time object detection a 8th ieee international conference on computer vision c vancouver 2001.目的 訓練得到乙個強分類器,該強分...

adaboost演算法分類器的訓練

經過多時的摸索,終於實現分類器的訓練。不敢保證每次都成功,但有一次實現,就可以把該注意的記錄下來 分類器的訓練分三步進行 第一步 收集材料 正負樣本材料的收集,本人是在灰度圖下進行實驗的。正樣本的大小最好一致,負樣本的大小沒有要求,只要內沒有目標就行。1.正樣本描述檔案 正樣本放在單獨的資料夾下,並...

分類器之adaboost

分類中通常使用將多個弱分類器組合成強分類器進行分類的方法,統稱為整合分類方法 ensemble method 比較簡單的如在boosting之前出現bagging的方法,首先從從總體樣本集合中抽樣採取不同的訓練集訓練弱分類器,然後使用多個弱分類器進行voting,終於的結果是分類器投票的優勝結果。這...