AdaBoostアルゴリズムの簡単な例
Bootstrappingアルゴリズムの主な考え方:
i)1つのサンプルセットDからn個のサンプルを繰り返しサンプリングする
ii)サンプリング毎のサブサンプルセットについて統計学習を行い,仮定Hiを得る.
iii)いくつかの仮説を組み合わせて最終的な仮説Hfinalを形成する
iv)最終的な仮定を特定の分類タスクに用いる
(2)Baggingアルゴリズムの主な考え方:
イ)訓練分類器
全体サンプルセットからn*をサンプリング
ii)分類器は投票を行い,最終的な結果は分類器投票の優勝結果である.
この2つのアルゴリズムは主に構想を提供し、本当の実用性はこの2つのアルゴリズム思想に基づくAdaBoostアルゴリズムである.
AdaBoostアルゴリズムプロセス:
これがAdaboostの構造で、最後の分類器YMは数個の弱い分類器(weak classifier)を組み合わせたもので、最後のm個の弱い分類器に相当して投票して分類を決定し、各弱い分類器の「発言権」α違います.
skit-learndの一例は以下の通りである.
i)1つのサンプルセットDからn個のサンプルを繰り返しサンプリングする
ii)サンプリング毎のサブサンプルセットについて統計学習を行い,仮定Hiを得る.
iii)いくつかの仮説を組み合わせて最終的な仮説Hfinalを形成する
iv)最終的な仮定を特定の分類タスクに用いる
(2)Baggingアルゴリズムの主な考え方:
イ)訓練分類器
全体サンプルセットからn*をサンプリング
ii)分類器は投票を行い,最終的な結果は分類器投票の優勝結果である.
この2つのアルゴリズムは主に構想を提供し、本当の実用性はこの2つのアルゴリズム思想に基づくAdaBoostアルゴリズムである.
AdaBoostアルゴリズムプロセス:
これがAdaboostの構造で、最後の分類器YMは数個の弱い分類器(weak classifier)を組み合わせたもので、最後のm個の弱い分類器に相当して投票して分類を決定し、各弱い分類器の「発言権」α違います.
skit-learndの一例は以下の通りである.
import numpy as np
import matplotlib.pyplot as plt
from 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()