演算法原理如下(參考自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):訓練樣本:datmat = matrix([[ 1. , 2.1, 0.3],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
#儲存該弱分類
"classest:
",classest.t
expon = multiply(-1*alpha*mat(classlabels).t,classest)
d = multiply(d,exp(expon)) #
重新計算樣本權重
d = d/d.sum() #
歸一化#
計算當前強分類器的分錯率,達到預期要求即停止
aggclassest += alpha*classest
"aggclassest:
",aggclassest.t
aggerrors = multiply(sign(aggclassest) != mat(classlabels).t,ones((m,1))) #
計算資料點哪個是錯誤
'aggerrors:
',sign(aggclassest) !=mat(classlabels).t
'aggerrors:
',aggerrors
errorrate = aggerrors.sum()/m #
計算錯誤率
"total error:
",errorrate
if errorrate == 0.0: break
return weakclassarr
[ 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,終於的結果是分類器投票的優勝結果。這...