整合學習4 boost

2021-10-03 18:32:40 字數 3390 閱讀 6076

本部落格僅用於知識記錄,方便自己學習,有錯誤之處歡迎指正

參考:清華大學 袁博老師 資料探勘課程  

參考:

1. boosting與bagging的區別:1)boosting是序列訓練的,而bagging是可以將多個分類器並行訓練

2)bagging是有放回的取樣本,boosting不需要以bootstrap的方式取樣

3)bagging每個樣本的權重是一樣的,boosting不同樣本權重不一樣,對分錯的樣本增加權重,分對的下調權重,從而達到更著重訓練這些樣本的目的

先用資料訓練第乙個分類器c1,然後對c1進行測試,在c1中被分錯的樣本將在訓練c2的時候著重訓練(每次測試完,會對樣本的權重進行調整)

訓練得到c2後,繼續進行測試,重新調整訓練集,然後訓練c3,一直訓練到分類器個數達到要求。對重對n個學習器加權結合

3.adaboost——經典的boosting演算法

分類正確的樣本權重

偽**:

#通過閾值對資料分類+1 -1

#dimen為datamat的列索引值,即特徵位置;threshineq為閾值對比方式,大於或小於

def stumpclassify(datamatrix, dimen, threshval, threshineq):

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

#閾值的模式,將小於某一閾值的特徵歸類為-1

if threshineq=='lt':#less than

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

#將大於某一閾值的特徵歸類為-1

else:#greater than

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

return retarray

#單層決策樹生成函式

def buildstump(dataarr, labels, d):

datamatrix = dataarr

labels = np.squeeze(labels.t)

m, n = datamatrix.shape #m是樣本數,n是特徵數

#步長或區間總數 最優決策樹資訊 最優單層決策樹**結果

numsteps=10.0

beststump={}

bestclasest = np.zeros((m,1))

minerror = np.inf

#遍歷資料集的每個特徵:遍歷特徵的每個步長:遍歷步長的每個閾值對比方式

for i in range(n):

rangemin = datamatrix[:, i].min()

rangemax = datamatrix[:, i].max()

stepsize = (rangemax - rangemin) / 2.

for j in range(-1, int(numsteps) + 1):

for inequal in ['lt', 'gt']:

thresv = rangemin + float(j) * stepsize

predv = stumpclassify(datamatrix, i, thresv, inequal)

errarr = np.ones((m, 1))

errarr[np.squeeze(predv.t) == labels] = 0

weighterror = np.dot(d.t, errarr)

if weighterror < minerror:

minerror = weighterror

bestclasest = predv.copy()

beststump['dim']=i

beststump['thresh']=thresv

beststump['ineq']=inequal

return beststump,minerror,bestclasest

def adaboost(dataarr, labels, num=40):

weakclassarr =

m = dataarr.shape[0]

d = np.ones((m, 1)) / m

aggclassest = np.zeros((m, 1))

labels = labels[np.newaxis, :].t

for i in range(num):

beststump, minerror, bestclasest = buildstump(dataarr, labels, d)

alpha = getalpha(minerror)

beststump['alpha'] = alpha

expon = np.multiply(-1 * alpha * labels, bestclasest)

d = np.multiply(np.exp(expon), d) / np.sum(d)

# d = np.squeeze(d)

if len(d.shape) > 2:

d = np.squeeze(d, 0)

aggclassest += alpha * bestclasest

aggerror = np.multiply(np.sign(aggclassest) != labels.t, np.ones((m, 1)))

errorrate = aggerror.sum() / m

if errorrate == 0:

break

return weakclassarr, errorrate, aggclassest

BOOST學習 BOOST安裝

2 安裝 等待批處理完成,生成若干新檔案,如果你本地裝有多個版本的vc,預設安裝會使用最高版本的vc,如果想修改用某個版本的vc編譯,用文字工具開啟.boost 1 55 0 tools build v2 user config.jam,修改 configure specific msvc vers...

Boost執行緒學習

本文參考部落格 include include include include include include include void hello 第一種方式 最簡單方法 int main 01 int argc,char argv 第二種方式 複雜型別物件作為引數來建立執行緒 結構中也可以定義操...

boost 學習筆記

先來看看如何賦值把 include include include include include include include using namespace std int tmain int argc,tchar ar include include include include incl...