adaboost,是英文"adaptive boosting"(自適應增強)的縮寫。它的自適應在於:前乙個基本分類器分錯的樣本會得到加強,加權後的全體樣本再次被用來訓練下乙個基本分類器。同時,在每一輪中加入乙個新的弱分類器,直到達到某個預定的足夠小的錯誤率或達到預先指定的最大迭代次數。
1.演算法流程:
給定乙個資料集
step1:初始化資料的權重向量d,每乙個樣本都被賦予相同權重1/n
step2:進行迭代,用m=1,2,..m表示當前第m輪迭代
(1)使用帶權值dm的資料集訓練得到弱分類器gm(選取讓誤差率最小的閾值來設計基本分類器,本文採用單決策樹作為基本分類器)
(2) 計算gm(x)在訓練資料集上的分類誤差率
即錯分類樣本例項的權值之和
(3)計算gm(x)的係數
(4)更新訓練集的權值分布,計算向量dm+1,用於下一輪迭代
其中,zm是規範化因子,使得dm+1成為乙個概率分布:
(5)組合各個弱分類器
得到強分類器
2.例項**
from numpy import *
def loadsimpdata():
datmat = matrix([[ 1. , 2.1],
[ 2. , 1.1],
[ 1.3, 1. ],
[ 1. , 1. ],
[ 2. , 1. ]])
classlabels = [1.0, 1.0, -1.0, -1.0, 1.0]
return datmat,classlabels
# 讀取資料,得到特徵矩陣和標籤矩陣
def loaddata(filename):
datamat=
labelmat=
fr=open(filename)
for line in fr.readlines():
currline=line.strip().split('\t')
linearr=[float(a) for a in currline[:-1]]
return datamat,labelmat
#構建單決策樹;可根據任意特徵分量設定閾值將資料分為兩類
def stumpclassify(datamat,dim,threshval,threshineq):
retarr=ones((shape(datamat)[0],1))
if threshineq=='lt':
retarr[datamat[:,dim]<=threshval]=-1 #陣列過濾,小於閾值的歸為-1類
else:
retarr[datamat[:,dim]>=threshval]=-1
return retarr
#選擇最佳決策樹;d為樣本權重係數向量
def buildstump(datamat,labelmat,d):
datamatrix=mat(datamat)
labelmatrix=mat(labelmat).transpose()
stump={}
m,n=shape(datamatrix)
bestclassest=ones((m,1))
numstep=10
minerror=inf
for i in range(n):#對每一維度特徵進行迴圈
maxval=datamatrix[:,i].max()
minval=datamatrix[:,i].min()
sizestep=(maxval-minval)/numstep
for j in range(-1,numstep+1):#對不同閾值迴圈;
for threshineq in ['lt','gt']:#對不等號方向進行迴圈
threshval=minval+j*sizestep
predictval=stumpclassify(datamatrix,i,threshval,threshineq)
errarr=mat(ones((m,1)))
errarr[predictval==labelmatrix]=0
weightederror=d.t*mat(errarr)
#print ("split: dim %d, thresh %.2f, thresh ineqal: %s, the weighted error is %.3f" % (i, threshval, threshineq, weightederror))
if weightederror最後通過在馬疝病資料集上運用adaboost分類器,對病馬是否死亡進行**。當分類器數目為50時,分類錯誤率可以達到21%,取得不錯的結果。
機器學習實戰 adaboost
adaboost基於錯誤提公升分類器效能 def stumpclassify datamatrix,dimen,threshval,threshineq 根據閾值分類 retarray ones shape datamatrix 0 1 if threshineq lt retarray datam...
機器學習實戰之AdaBoost元演算法
今天學習的機器學習演算法不是乙個單獨的演算法,我們稱之為元演算法或整合演算法 ensemble 其實就是對其他演算法進行組合的一種方式。俗話說的好 三個臭皮匠,賽過諸葛亮 整合演算法有多種形式 對同一資料集,使用多個演算法,通過投票或者平均等方法獲得最後的 模型 同一演算法在不同設定下的整合 同一演...
機器學習之AdaBoost
機器學習之adaboost adaboost是一種組合學習的提公升演算法,能將多個弱學習演算法 甚至只比隨機猜測好一點 組合起來,構成乙個足夠強大的學習模型。組合學習是將多個假說組合起來,並整合它們的 比如對於乙個問題,我們可以生成20棵決策樹,讓它們對新樣例的分類進行 最後通過投票決定最終的 這樣...