AdaBoost演算法的簡單例子

2021-08-18 02:26:41 字數 3542 閱讀 6280

i)重複地從乙個樣本集合d中取樣n個樣本

ii)針對每次取樣的子樣本集,進行統計學習,獲得假設hi

iii)將若干個假設進行組合,形成最終的假設hfinal

iv)將最終的假設用於具體的分類任務

(2)bagging演算法主要思路:

i)訓練分類器

從整體樣本集合中,抽樣n* 

ii)分類器進行投票,最終的結果是分類器投票的優勝結果

這兩個演算法提供的主要是思路,真正的實用性是基於這兩個演算法思想的adaboost演算法:

adaboost演算法過程:

這就是adaboost的結構,最後的分類器ym是由數個弱分類器(weak classifier)組合而成的,相當於最後m個弱分類器來投票決定分類,而且每個弱分類器的「話語權」α不一樣。

import

numpy as

npimport

matplotlib.pyplot as

pltfrom

sklearn import

datasets

from

sklearn.tree import

decisiontreeclassifier

from

sklearn.metrics import

zero_one_loss

from

sklearn.ensemble import

adaboostclassifier

import

time

a=time.time()

n_estimators=400

learning_rate=1

x,y=datasets.make_hastie_10_2(n_samples=12000

,random_state=1

)x_test,y_test=x[2000

:],y[2000

:]x_train,y_train=x[:2000

],y[:2000] 

dt_stump=decisiontreeclassifier(max_depth=1

,min_samples_leaf=1

)dt_stump.fit(x_train,y_train)

dt_stump_err=1.0

-dt_stump.score(x_test,y_test)

dt=decisiontreeclassifier(max_depth=9

,min_samples_leaf=1

)dt.fit(x_train,y_train)

dt_err=1.0

-dt.score(x_test,y_test)

ada_discrete=adaboostclassifier(base_estimator=dt_stump,learning_rate=learning_rate,n_estimators=n_estimators,algorithm='samme'

)ada_discrete.fit(x_train,y_train)

ada_real=adaboostclassifier(base_estimator=dt_stump,learning_rate=learning_rate,n_estimators=n_estimators,algorithm='samme.r'

)ada_real.fit(x_train,y_train)

fig=plt.figure()

ax=fig.add_subplot(111

)ax.plot([1

,n_estimators],[dt_stump_err]*2

,'k-'

,label='decision stump error'

)ax.plot([1

,n_estimators],[dt_err]*2

,'k--'

,label='decision tree error') 

ada_discrete_err=np.zeros((n_estimators,))

for i,y_pred in

enumerate(ada_discrete.staged_predict(x_test)):

ada_discrete_err[i]=zero_one_loss(y_pred,y_test)    ######zero_one_loss

ada_discrete_err_train=np.zeros((n_estimators,))

for i,y_pred in

enumerate(ada_discrete.staged_predict(x_train)):

ada_discrete_err_train[i]=zero_one_loss(y_pred,y_train)  

ada_real_err=np.zeros((n_estimators,))

for i,y_pred in

enumerate(ada_real.staged_predict(x_test)):

ada_real_err[i]=zero_one_loss(y_pred,y_test)

ada_real_err_train=np.zeros((n_estimators,))

for i,y_pred in

enumerate(ada_real.staged_predict(x_train)):

ada_discrete_err_train[i]=zero_one_loss(y_pred,y_train)

ax.plot(np.arange(n_estimators)+1

,ada_discrete_err,label='discrete adaboost test error'

,color='red'

)ax.plot(np.arange(n_estimators)+1

,ada_discrete_err_train,label='discrete adaboost train error'

,color='blue'

)ax.plot(np.arange(n_estimators)+1

,ada_real_err,label='real adaboost test error'

,color='orange'

)ax.plot(np.arange(n_estimators)+1

,ada_real_err_train,label='real adaboost train error'

,color='green') 

ax.set_ylim((0.0

,0.5

))ax.set_xlabel('n_estimators'

)ax.set_ylabel('error rate') 

leg=ax.legend(loc='upper right'

,fancybox=true

)leg.get_frame().set_alpha(0.7

)b=time.time()

print('total running time of this example is :'

,b-a)

plt.show()

AdaBoost 演算法簡單實現

演算法基本原理如下 第1行初始化樣本權重,m表示樣本總數。第2到11行表示的是每一輪訓練過程,t表示當前訓練的輪數,t表示總的訓練輪數 第4行計算訓練誤差 第5行計算當前基礎模型的組合係數 第6到8行更新樣本權重 其中,data就是輸入的訓練資料,dt則是第t個基礎模型對應的訓練樣本的權重。這裡定義...

adaboost 簡單介紹

include include include include include using std vector using namespace std define fcount 100 特徵數 define ccount 30 弱分類器個數 define pcount 200 正樣本數 defi...

AdaBoost演算法原理

每個haar特徵對應看乙個弱分類器,但並不是任伺乙個haar特徵都能較好的描述人臉灰度分布的某一特點,如何從大量的haar特徵中挑選出最優的haar特徵並製作成分類器用於人臉檢測,這是adaboost演算法訓練過程所要解決的關鍵問題。paul viola和michael jones於2001年將ad...