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

2021-09-22 09:50:52 字數 1723 閱讀 9473

def

loadsimpdata():

#樣本特徵

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]

return datmat,classlabels

遍歷樣本的所有特徵(本例子每個樣本有三個特徵,即遍歷這三個特徵值);

求出該特徵值步長(不同特徵不一樣),(最大特徵值-最小特徵值)/步長移動次數,如本例,假設步長移動次數為10,則第乙個特徵步長為(7-1)/10 = 0.6;

根據特徵值步長開始從最小特徵值遍歷到最大特徵值;

遍歷判斷符號,大於還是小於;

計算出閾值(根據最小特徵值及步長),根據閾值、符號、及特徵索引、開始對樣本分類;

根據每個樣本權重以及分類結果計算分錯率,若該分錯率小於最小分錯率,則更新最小分錯率;

返回最小分錯率下的特徵索引、符號、閾值,即得到弱分類器。

def

buildstump(datmat,classlabels,d):

datamatrix = mat(datmat); labelmat =mat(classlabels).t

m,n =shape(datamatrix)

numsteps = 10.0; beststump = {}; bestclasest = mat(zeros((m,1)))

minerror = inf #

最小錯誤率初始化為無窮大

for i in

range(n):

rangemin = datamatrix[:,i].min(); rangemax =datamatrix[:,i].max();

stepsize = (rangemax-rangemin)/numsteps

for j in range(-1,int(numsteps)+1):

for inequal in ['

lt', 'gt'

]: threshval = (rangemin + float(j) *stepsize)

predictedvals =stumpclassify(datamatrix,i,threshval,inequal)

errarr = mat(ones((m,1)))

errarr[predictedvals == labelmat] =0

weightederror = d.t*errarr

if weightederror

minerror =weightederror

bestclasest =predictedvals.copy()

beststump[

'dim

'] =i

beststump[

'thresh

'] =threshval

beststump[

'ineq

'] =inequal

return beststump,minerror,bestclasest

adaboost演算法分類器的訓練

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

分類器之adaboost

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

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

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