基於單層決策樹的 AdaBoost的訓練及測試過程

2021-07-11 03:00:54 字數 1593 閱讀 4769

1、整個實現的偽**python:

對每次迭代:

計算alpha(利用該決策樹的錯誤率進行計算);

計算新的每個樣本的權重d(使用alpha進行計算,第一次分對的樣本,權重減小反之,權重增大)

給最佳單側決策樹的**結果新增alpha權重(弱分類器(這裡指最佳的單側決策樹)的錯誤率越小,賦予該分類器的權重值alpha值就越大);

計算錯誤率(當錯誤率為0時,迭代停止!);

2、python**:

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

weakclassarr =

m = shape(dataarr)[0]

d = mat(ones((m,1))/m) #init d to all equal

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

for i in range(numit):

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

#print "d:",d.t

alpha = float(0.5*log((1.0-error)/max(error,1e-16)))#calc alpha, throw in max(error,eps) to account for error=0

beststump['alpha'] = alpha

#print "classest: ",classest.t

expon = multiply(-1*alpha*mat(classlabels).t,classest) #exponent for d calc, getting messy

d = multiply(d,exp(expon)) #calc new d for next iteration

d = d/d.sum()

#calc training error of all classifiers, if this is 0 quit for loop early (use break)

aggclassest += alpha*classest

#print "aggclassest: ",aggclassest.t

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

errorrate = aggerrors.sum()/m

print "total error: ",errorrate

if errorrate == 0.0: break

return weakclassarr,aggclassest

3、輸出結果

可以看出圖中的結果包含三部字典,即包含三個弱分類器,使得最終錯誤率為0;可以仔細觀察d因為上一次的結果權重改變

AdaBoost演算法1(基於單層決策樹)

今天我們來討論乙個不一樣的分類演算法,這種演算法叫做元演算法,元演算法是一種與其他演算法組合在一起來使用的演算法。今天我們來討論自適應boosting 在訓練資料中的每乙個樣本賦予乙個權重,這些權重構成向量d,開始時權重值相等,在訓練弱分類器的過程中這些權重值會發生變化,對於分對的樣本權重值會下降,...

決策樹01 決策樹的原理

此筆記根據 machine learning in action 和周志華教授的 機器學習 所作。缺點 可能會產生過度匹配問題。適用資料型別 數值型和標稱型 machine learning in action if so return 類標籤 else 尋找劃分資料集的最好特徵 劃分資料集 建立分...

決策樹的基尼係數計算過程

在介紹具體的計算之前,先從乙個例子入手吧。先看看下面這個資料,我們需要通過前三列的特徵來推斷出最後一列是yes,no chest pain good blood circulation blocked arteries heart disease nono nono yesyes yesyes ye...