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

2022-03-12 04:01:03 字數 2588 閱讀 9163

演算法原理如下(參考自viola p, jones m. robust real time object detection[a] . 8th ieee international conference on computer vision[c] . vancouver , 2001.)

目的:訓練得到乙個強分類器,該強分類器分錯率低於預設值,且該強分類器由若干個弱分類器(對應單個特徵)組成,通過若干個分類器及其權重計算得到的值對樣本進行分類。

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

訓練樣本:datmat = matrix([[ 1. ,  2.1,  0.3],

[ 2. ,  1.1,  0.4],

[ 1.3,  1. ,  1.2],

[ 1. ,  1. ,  1.1],

[ 2. ,  1. ,  1.3],

[ 7. ,  2. ,  0.35]])

classlabels = [1.0, 1.0, 1.0, -1.0, -1.0, -1.0][,,

,,]手動計算分類:

針對第乙個樣本[ 1. ,  2.1, 

0.3]

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

-0.34657359027997275

-0.5493061443340549

- 0.5493061443340549

+ 0.4777557225137181

+ 0.49926441505556346

= -0.468165741378801--->小於0,正樣本

針對第六個樣本[

7. ,  2. ,  0.35]

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

+0.34657359027997275

-0.5493061443340549

+ 0.5493061443340549

+ 0.4777557225137181

- 0.49926441505556346

= +0.3250648977381274--->大於0,負樣本

其它樣本的計算類似

結論:

強分類器分類,即通過若干個分類器的權重的正負號計算得出,而正負號是通過該若分類器的閾值判斷得到;

強分類器比弱分類器準確率高。

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

初始化權重 負樣本權重w0i 1 2m,正樣本權重w1i 1 2l,其中m為負樣本總數,l為正樣本總數 對於t 1,t t為訓練次數 權重歸一化,簡單說就是使本輪所有樣本的權重的和為1 根據每乙個特徵訓練簡單分類器,僅使用乙個特徵 從所有簡單分類器中選出乙個分錯率最低的分類器,為弱分類器 更新權重 ...

adaboost演算法分類器的訓練

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

分類器之adaboost

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