1、整個實現的偽**python:
對每次迭代:2、python**:計算alpha(利用該決策樹的錯誤率進行計算);
計算新的每個樣本的權重d(使用alpha進行計算,第一次分對的樣本,權重減小反之,權重增大)
給最佳單側決策樹的**結果新增alpha權重(弱分類器(這裡指最佳的單側決策樹)的錯誤率越小,賦予該分類器的權重值alpha值就越大);
計算錯誤率(當錯誤率為0時,迭代停止!);
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...