研究レポート

No.15 ～アンサンブル学習～2020 年 12 月 16 日 株式会社アイズファクトリー

https://bodais.com/company/

概要
予測精度を上げることは機械学習において重要な課題である。どれほど高度な手法を用いても、精度の低いモデルは役に立たない。しかし、精度の低いモデルも、複数組み合わせることで高い精度を実現することができる。この手法をアンサンブル学習という。アンサンブル学習は、精度を向上するために欠かせない手法となっており、Kaggle などの機械学習のコンペティションで上位に入賞するためにも必須の技術である。本稿ではアンサンブル学習の代表的な手法として、バギング、ブースティング、スタッキングの 3 つの手法を紹介する。
1.

はじめに

アンサンブル学習とは、複数のモデルを組み合わせることで汎化性能の高いモデルを構築する手法である。最も単純な方法としては、各モデルの予測値の多数決や平均値をとる方法が考えられる。この方法は単純アンサンブル学習と呼ばれる[1]。単一のモデルに比べて、アンサンブル学習は予測精度が高くなることが示されている[2]。アンサンブ
ル学習が、その汎化性能の高さを認められるきっかけになったことの一つに Netflix Prize [3]がある。Netflix Prizeとは、2006 年から 2011 年に Netflix 社が開催した大型のコンペティションで、映画の評価データに基づく映画のレコメンドアルゴリズムを題材に、既存のレコメンドシステムの精度を 10%上回ることが条件だった。2009 年にこの条件を達成し優勝したチーム「BellKor’s Pragmatic Chaos」がアンサンブル学習を使用していたのである[4]。ここで使用されていた手法は「ブレンディング (blending) [5]」と呼ばれる手法で、Netflix Prize での優勝を機に、基本的な手法として使われるようになった。
本稿では、アンサンブル学習の中でもよく知られる「バギング」、「ブースティング」、「スタッキング」の 3 つの手法に焦点を置いて解説する。先ほどのブレンディングは、スタッキングと非常に似た手法である。

図 1 アンサンブル学習の誤り率[1]
中の黒で塗りつぶされた部分の和が最終的なモデルの誤り率 (0.026) となり、単一のモデルの誤り率 0.3 よりも小さくなることがわかる。
バギングには不安定なモデルを使用すべきことが知られている。不安定というのは、データの変動に対して敏感であることをいい、例えば、SVN のような線形に分類するモデルは安定性が高く、NN のように非線形に分類するモデ
ルは不安定である[7]。不安定なモデルをバギングによって組み合わせることで、バリアンスの小さいモデルを構成することができる。ランダムフォレスト[8]はバギングの代表例である。
3.

2.

バギング (bagging) は、単純アンサンブル学習と非常によく似た手法で、複数のモデルを構築し、各モデルの予測を集約して最終的な結果を出力する。結果の出力には多数決や平均値が用いられる。
バギングを特徴づけるのはブートストラップサンプリン
グ (bootstrap sampling) という学習データの抽出手法で、学習に全てのデータを用いるのではなく、モデルごとに復元抽出を行うことで学習データを生成する。この抽出法により、モデルごとの学習データにずれが生じ、データ生成を複数回行った状況を再現するのである。ブートストラッ
プサンプリングとモデルの集約を組み合わせる方法を
bootstrap aggregating と い い 、 バ ギ ン グ い う 名 前 もBootstrap AGGregatING に由来している[6]。
モデルを集約することで、モデルの精度が向上する理由を説明する[1]。𝑙個のモデルを用いて分類学習を行う状況を考える。各モデルの誤り率は一律に𝜃とし、各モデルの出力結果を多数決により集約することで最終的な結果を出力する。このとき、𝑙個のモデルのうち𝑘個のモデルが誤る確率
𝑃(𝑘)は 𝑙 𝐶𝑘 𝜃 𝑘 (1 − 𝜃)𝑙−𝑘 により表すことができ、最終的な結果が誤る確率は∑𝑙 𝑙 𝑃(𝑘)により求められる。図 1 に誤り率𝑘>

ブースティングバギング

2

𝜃 = 0.3 のモデルを 𝑙 = 21個用いた場合の𝑃(𝑘) を示す。図

図 2 バギングとブースティング[1]ブースティング (boosting) とは、複数のモデルを直列に組み合わせることでモデルの精度を向上する手法である。前のモデルが誤って学習したデータに注目して逐次的に学習するため、並列構造のバギングよりも学習に時間がかかる。バギングとブースティングの概要を図 2 に示す。𝐷が学習データ、𝑔がモデル、𝛼と𝑤はそれぞれ各モデルとデータの重みを表している。
ブースティングの原点はValiant により提唱されたPAC 学習にある[9]。PAC (Probably Approximately Correct) 学習というのは、計算複雑性の概念を学習アルゴリズムに対して導入する研究分野のことで[10]、ブースティングは「PAC 学習における弱学習器を強学習器に変換するにはどうすればいいか」という問題に基づいている[11]。弱学習器とは、ランダムよりは多少精度のよいモデルのこと

Copyright© 2020 i’s FACTORY Co., Ltd. All Rights Reserved.

で、強学習器というのは、誤分類率が十分小さいモデルのことをいう。弱学習器の精度を boost (向上)することから boosting とよばれる。[11]や[12]などで初期のブースティングの手法が提案されているが、現実的に使用可能な手法としては Adaboost が初めである[9]。
Adaboost のアルゴリズムを簡単に説明する。
図2 にあるように、ブースティングアルゴリズム𝑔は𝐾 個の弱学習器𝑔𝑖 を用いて、𝐾𝑔(𝑥) = Σ𝑖=𝑘
𝛼𝑖 𝑔𝑖 (𝑥)により定義されるが、以下の手順でこの𝛼𝑖 は決定される。
step 0𝑁個のデータ𝒙 = {(𝑥1 , 𝑦1 ), … . (𝑥𝑁 , 𝑦𝑁 )}に対して、そ1の重み（生起確率）𝐷1 = {𝑤1,1 , … . 𝑤1,𝑁 }を𝑤𝑖 = により𝑁初期化する。
step 1
𝐷𝑖 を元に𝑁回の復元抽出を行ったデータで弱学習器𝑔𝑖を構成する。構成方法は𝑔𝑖 のアルゴリズムによる。
𝑁step 2𝑔𝑖 の誤り率 𝑒𝑖 = Σ𝑗=1𝑤𝑖,𝑗 (𝑦𝑗 − 𝑔𝑖 (𝑥𝑗 ))を計算する。
11−𝑒𝑖2𝑒𝑖step 3

学習器𝑔𝑖 の重み 𝛼𝑖 = log

step 4

データの重み𝐷𝑖+1 を𝑤𝑖+1,𝑗 =を計算する。
𝑤𝑖,𝑗 exp(−𝛼𝑖 𝑦𝑗 𝑔𝑖 (𝑥𝑗 ))Σ𝑁
𝑘=1 𝑤𝑖,𝑘 exp(−𝛼𝑖 𝑦𝑘 𝑔𝑖 (𝑥𝑘 ))により更新する。
step 5
1～4 を𝑖 = 𝐾まで繰り返す。
ブースティングはバイアスが小さくなりやすい一方、バリアンスが大きくなるため過学習が起きやすくなる。一般に、バイアスとバリアンスはトレードオフの関係にあり、「バイアスとバリアンスのジレンマ[1]」として知られている。
4.

スタッキング

学習データと検証データの組(𝑇𝑘 , 𝑉𝑘 )を r 個作る。
step 1 以下の手順で(𝑇𝑘 , 𝑉𝑘 )から学習データを構成する。
1.
モデル𝐺𝑖 について学習データ𝑇𝑘 による学習を行い、検証データ𝑉𝑘 の入力値𝑣𝑘,𝑖𝑛 を問題データとして予測値𝐺𝑖 (𝑇𝑘 , 𝑣𝑘,𝑖𝑛 )を出力する。
2.
step1-1 をモデル数の N 回繰り返すと、各モデルの予測値𝐺𝑖 (𝑇𝑘 , 𝑣𝑘,𝑖𝑛 )と正解データ𝑣𝑘,𝑎𝑛𝑠 から次層の学習データが構成できる。
(𝐺1 (𝑇𝑘 , 𝑣𝑘,𝑖𝑛 ), … , 𝐺𝑁 (𝑇𝑘 , 𝑣𝑘,𝑖𝑛 ), 𝑣𝑘,𝑎𝑛𝑠 )step 2 step1 を r 回繰り返し、各組(𝑇𝑘 , 𝑉𝑘 )から学習データを構成する。
step 3 step 1 の要領で各モデルを全データで学習し、問題に対する予測から、次層の問題データ(𝐺1 (𝜃, 𝑞), … , 𝐺𝑁 (𝜃, 𝑞))を構成する。
5.

本稿ではアンサンブル学習の代表例として、バギング、ブースティング、スタッキングについて解説した。1 章で紹介したブレンディングのように、この 3 手法以外にも、アンサンブル学習は存在する。
アンサンブル学習によって、モデルの精度向上が期待できるが、データや組み込むモデルによっては必ずしも精度が向上するとは限らない。精度向上の銀の弾丸ではないことは理解する必要がある。
6.

スタッキングは、複数のモデルを段階的に学習し、前段のモデルの予測値を後段のモデルの学習に使用する手法である。2 層のスタッキングの概要を図 3 左に示す。𝜃はトレーニングデータ、𝑞は問題データ、𝐺はモデルとする。1 層目のモデル𝐺𝑖 が学習データ𝜃0 を元に学習し、問題データ𝑞0 の予測を出力する。𝜃で学習をしたモデルが問題𝑞に対して出力した予測を𝐺(𝜃; 𝑞)により表すとすると、𝐺𝑖 が出力した予測は𝐺𝑖 (𝜃0 ; 𝑞0 )と表せる。1 層目のモデルの予測値を使用して 2 層目のモデル𝐺の学習データ𝜃1 と問題データ𝑞1 を構成し、2 層目のモデルから最終予測𝑝 = 𝐺(𝜃1 ; 𝑞1 )を得る。学習データと問題データの構成方法は後述する。最終的なモデル𝐺をメタモデルといい、前段のモデルの信頼性を学習することで最終的な予測を出力している。この前層の出力を次層のモデルが利用するという構成を繰り返すと多層に積み上げる (stack) ことができる。
モデルの予測値を元に、学習データと問題データを構成する方法の概要を説明する[13]。元の学習データを𝜃、問題データ𝑞で表すとする。

まとめ参考文献[1] 上田修功「アンサンブル学習」コンピュータビジョンとイメージメディア, Vol. 46, No. SIG 15(CVIM 12),p.11-20 (2005)[2] Thomas G. Dietterich "Machine Learning Research:
Four Current Directions" AI Magazine, Vol.18, No. 4,p.97-136 (1997)[3] Netflix Pirze, https://www.netflixprize.com/[4] 馬場雪乃「機械学習コンペティションの進展と今後の展開」人工知能 31 巻 2 号 p.248-253, (2016)[5] Andreas Töscher and Michael Jahrer "The BigChaos
Solution to the Netflix Grand Prize" (2009)[6] Leo Breiman "Bagging Predictors" Machine Learning,
Vol. 24, No.2, p.123-140 (1994)[7] Zhi-Hua Zhou, 訳: 宮岡悦良・下川朝有「アンサンブル法による機械学習 基礎とアルゴリズム」近代科学社(2012)[8] Leo Breiman "Random Forests" Machine Learning,
Vol. 45, No. 1, p.5-32 (2001)[9] Yoav Freund, Robert Schapire, 訳: 安倍直樹「ブースティング入門」人口知能学会誌, 14 巻 5 号, (1999)[10] 篠原歩, 宮野悟「PAC 学習 確率的で近似的に正しい学習」情報処理 Vol. 32, No.3, p. 257-263 (1991)[11] Yoav Freund "Boosting a weak learning algorithm
by majority" (1995)[12] Pobert E, Schapire "The Strength of Weak
Learnability" Machine Learning, 5, p.197-227[13] David H. Wolpert "Stacked Generalization" NeuralNetworks, 5(2), p.241-259

図 3 スタッキングの概要（左）と学習データの構成（右）step 0 交差検証法の要領で学習データを r 個に分割し、Copyright© 2020 i’s FACTORY Co., Ltd. All Rights Reserved.