今天我們來討論乙個不一樣的分類演算法,這種演算法叫做元演算法,元演算法是一種與其他演算法組合在一起來使用的演算法。今天我們來討論自適應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...