アンサンブル学習
アンサンブル学習とは
モデルの汎化性能を向上させるために、個々に学習した複数のモデルを融合させる方法です。
学習済みモデルにおけるエラーの主な原因は、ノイズ、バイアス、バリアンスの3つです。
アンサンブル学習はこれらを最小化して汎化性能の向上をはかります。
この記事では以下の手法について解説してあります。
- バギング
- ブースティング
- スタッキング
バギング - Bagging
Bootstrap aggregatingの強調文字部分をとって、Baggingといいます。
ブートストラップとは学習時にデータセットからランダムにデータを取得して複数のデータセットを作り、そのデータを学習して複数のモデルを作る手法です。
-
元のデータセットからランダムにn個のインスタンスを取得し、少しずつ異なるn個のブートストラップ標本(Bootstrap Sample)を作ります。
-
それぞれのブートストラップ標本を並列に学習し、n個のモデルを作成します。
この時、ブートストラップによって選ばれなかったデータセットを3.の投票時にテストデータとして利用します。この選ばれなかったデータのことをOut-Of-Bag(以下OOB)といいます。
なお、Out-Of-Bagは元のデータセットの36%程度になります。 -
出来上がったn個の学習器において、OOBを使いそれぞれのモデルで推論を行います。
出力された結果で多数決を行います。 -
融合して、一つの学習器を作成します。
バギングは並列で学習できるので、計算速度が早い傾向にあります。また、過学習が起こりにくいですが、精度は後述のブースティングよりも劣るケースがあります。
代表的なアルゴリズム
- ランダムフォレスト
ブースティング - Boosting
バギングは、ブートストラップサンプリングを使い学習に利用するデータを少しずつ変えていたのに対し、ブースティングは取得するデータに重みをつけて少しずつデータを変えて学習し学習器を作ります。
- 元データセットからデータを抽出して学習し学習器を作ります。
- ここで作成した学習器を使い、予測します。
- 予測を誤ったデータを優先的に、正しく予測できるように学習していきます。
この動きを繰り返して、最終的に出来上がった学習器の平均をとり一つの学習器を作ります。
ブースティングは連続的に計算を行うため、学習時間が長くなりますがバギングよりも性能が良くなることがあります。ただし、学習器を増やしすぎると過学習を起こすことがあります。
代表的なアルゴリズム
- AdaBoost
- XGBoost
- LightGBM
- CatBoost
スタッキング - Stacking
その名の通り、学習器を積み上げる(スタック)手法です。
大きく2つのレベルに処理がわかれます。
Level 1では、データセットを複数のアルゴリズムを使い学習してモデルを作ります。
ここで使うアルゴリズムは任意のもの(Random Tree, XGBoost, LightBGMなど)を使うことがでいます。
次に、作成した学習器を使い予測を行います。
Level 2では、それぞれの学習器が予測した値を「特徴量」として学習して、最終的に一つの学習器を作成します。
VARISTAにおけるアンサンブル学習
それぞれのアンサンブル学習の手法はVARISTAで行うこともできます。
詳しくは学習テンプレートをご確認ください。