初始化權重:負樣本權重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
#儲存該弱分類
"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
-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,終於的結果是分類器投票的優勝結果。這...