Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What is going on with this article?
@tjmnmn

ブートストラップサンプリング(Bootstrap Sampling)法とそのscikit-learnを用いた実行

More than 1 year has passed since last update.

Bootstrap Samplingとは

母集団となるデータがあるときに,母集団から重複を許してランダムにいくらかデータを取り出して再標本化をする手法.

具体例:

母集団を$X= {x_1,x_2,...,x_{10} }$とする.
1. 再標本化を行う回数と,再標本化されたサンプルのサンプルサイズを設定する(例では再標本化を3回,サンプルサイズを5としておく)
2. 母集団$X$から重複を許してランダムにサンプリングをする
例:
$X_1=x_1,x_3,x_3,x_6,x_9$
$X_2=x_2,x_2,x_2,x_3,x_7$
$X_3=x_2,x_4,x_5,x_8,x_8$

機械学習におけるBootstrap sampling

バギング(bagging)と呼ばれるアンサンブル学習の手法では,まず母集団からBootstrap samplingによって複数のサンプルを抽出する.そしてそれを訓練データとすることで複数の予測モデルを生成し,それらの予測モデルを何らかの方法によって結合することで(多数決,平均,出力をメタ特徴量として新たな予測モデルの構築,etc...),予測精度の向上,過学習の回避が見込める. 
bagging.png

scikit-learnを用いたBootstrap

「Bootstrap sklearn」とかでググるとだいたい公式ドキュメントが一番上に出てきてsklearn.cross_validation.Bootstrapを使えと言ってくるが,sklearn.cross_validationは廃止される予定なので好ましくない.(私の環境ではそもそもsklearn.cross_validationのなかにBootstrapが見つからずimportすらできなかった)
 ということで,その代わりにsklearn.utils.resampleを使ってBootstrap samplingをしましょう.

bootstrap.py
from sklearn.utils import resample
# [0,1,2,...,9]と[10,11,12,...,19]の生成
data_x = [i for i in range(10)]
data_y = [i+10 for i in range(10)]

# K:再標本化の回数 SIZE:再標本化されたもののサンプルサイズ
K = 10
SIZE = len(data_x)

# bootstrap sampling
for i in range(K):
    resampled_data_x, resampled_data_y = resample(data_x,data_y, 
                                                   n_samples = SIZE)
    print("------%d resample ------"% i)
    print(resampled_data_x)
    print(resampled_data_y)
output
------0 resample ------
[4, 6, 0, 9, 7, 5, 0, 5, 3, 3]
[14, 16, 10, 19, 17, 15, 10, 15, 13, 13]
------1 resample ------
[5, 2, 6, 4, 5, 1, 1, 3, 1, 1]
[15, 12, 16, 14, 15, 11, 11, 13, 11, 11]
------2 resample ------
[0, 3, 0, 1, 2, 1, 7, 7, 1, 3]
[10, 13, 10, 11, 12, 11, 17, 17, 11, 13]
------3 resample ------
[1, 8, 1, 0, 2, 8, 3, 8, 4, 0]
[11, 18, 11, 10, 12, 18, 13, 18, 14, 10]
------4 resample ------
[3, 1, 6, 7, 6, 6, 4, 3, 1, 1]
[13, 11, 16, 17, 16, 16, 14, 13, 11, 11]
------5 resample ------
[3, 4, 6, 6, 9, 7, 3, 1, 4, 3]
[13, 14, 16, 16, 19, 17, 13, 11, 14, 13]
------6 resample ------
[6, 7, 1, 3, 6, 4, 8, 9, 9, 9]
[16, 17, 11, 13, 16, 14, 18, 19, 19, 19]
------7 resample ------
[9, 8, 3, 2, 6, 2, 0, 9, 4, 1]
[19, 18, 13, 12, 16, 12, 10, 19, 14, 11]
------8 resample ------
[0, 9, 2, 7, 4, 6, 0, 6, 8, 8]
[10, 19, 12, 17, 14, 16, 10, 16, 18, 18]
------9 resample ------
[5, 9, 9, 1, 3, 7, 7, 3, 6, 3]
[15, 19, 19, 11, 13, 17, 17, 13, 16, 13]

resampleメソッドには,再標本化されたサンプルのサンプルサイズをn_samplesに渡してやれば良い.(デフォルトは入力のデータ長len(array)
出力を確認すると,data_xdata_yが対応された状態で再標本化されており,重複が許されていることがわかる.

参考

scikit-learnのresampleメソッドのドキュメント(https://scikit-learn.org/stable/modules/generated/sklearn.utils.resample.html
朱鷺の杜Wiki「バギング」(http://ibisforest.org/index.php?%E3%83%90%E3%82%AE%E3%83%B3%E3%82%B0

19
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tjmnmn

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
19
Help us understand the problem. What is going on with this article?