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

2021-07-10 11:09:13 字數 2192 閱讀 5870

今天我們來討論乙個不一樣的分類演算法,這種演算法叫做元演算法,元演算法是一種與其他演算法組合在一起來使用的演算法。今天我們來討論自適應boosting:在訓練資料中的每乙個樣本賦予乙個權重,這些權重構成向量d,開始時權重值相等,在訓練弱分類器的過程中這些權重值會發生變化,對於分對的樣本權重值會下降,對於分錯的樣本其權重值會提高。直到所有資料全部正確分類。下面就來介紹一種基於單層決策樹的自適應分類器:

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 stumpclassify(datamatrix,dimen,threshval,threshineq):

retarray = ones((shape(datamatrix)[0],1))

if threshineq == 'lt':

retarray[datamatrix[:,dimen] <= threshval] = -1.0

else:

retarray[datamatrix[:,dimen] > threshval] = -1.0

return retarray

def buildstump(dataarr,classlabels,d):

datamatrix = mat(dataarr); 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

print "split: dim %d, thresh %.2f, thresh ineqal: %s, the weighted error is %.3f" % (i, threshval, inequal, weightederror)

if weightederror < minerror:

minerror = weightederror

bestclasest = predictedvals.copy()

beststump['dim'] = i

beststump['thresh'] = threshval

beststump['ineq'] = inequal

return beststump,minerror,bestclasest

第乙個函式不過多解釋,初始化資料。第二個函式用於測試是否有某個值小於或者大於測試的閥值。首先初始化乙個陣列全為1,接下來將符合小於或者大於閥值的數值設為-1.第二個函式就比較難一點了。輸入資料報括特徵資料和標籤資料,以及乙個非常重要的權重向量。它是乙個基於資料的權重向量,一會就會看到它的用途,接下來在資料集上的所有特徵值上進行遍歷,找出最大之和最小值,然後計算出步長,接下來第二層迴圈再次遍歷整個資料集,threshval計算出閥值,然後呼叫stumpclassify()函式。接下來就是將正確分類的樣本設為0,錯誤的設定為1.接下來用權重向量和錯誤向量相乘並求和得到相應的錯誤率,最後返回錯誤率最小情況下的決策樹,錯誤率和類別估計值。到此單層決策樹已經生成。

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

1 整個實現的偽 python 對每次迭代 計算alpha 利用該決策樹的錯誤率進行計算 計算新的每個樣本的權重d 使用alpha進行計算,第一次分對的樣本,權重減小反之,權重增大 給最佳單側決策樹的 結果新增alpha權重 弱分類器 這裡指最佳的單側決策樹 的錯誤率越小,賦予該分類器的權重值alp...

基於微控制器PID演算法溫度控制系統設計(畢設)

恆溫控制器廣泛應用於工業需要溫度控制的地方,電子產品出貨前也要進行恆溫老化測試,溫度控制器必不可少,而控制溫度的過程中,加入pid演算法,可以避免加熱器的熱慣性,達到恆溫控制的目的 pid pid 存放pid演算法所需要的資料 void pid calc pid計算 pid.ek pid.sv pi...

基於微控制器PID演算法溫度控制系統設計(畢設)

恆溫控制器廣泛應用於工業需要溫度控制的地方,電子產品出貨前也要進行恆溫老化測試,溫度控制器必不可少,而控制溫度的過程中,加入pid演算法,可以避免加熱器的熱慣性,達到恆溫控制的目的 pid pid 存放pid演算法所需要的資料 void pid calc pid計算 pid.ek pid.sv pi...