2016-06-14_23h50_52

みなさん、回帰分析やクラス分類を行うデータ解析・データ分析のときには必ずアンサンブル学習をしましょう!

アンサンブル学習はとても単純です。データセットが与えられたときに、たくさんの回帰分析モデルやクラス分類モデルを作ればいいんです。

どうやってたくさんモデルを作るの?

たくさんモデルを作る方法は、大きく分けて2通りあります。それらは

  1. ランダムに説明変数(特徴量・記述子・入力変数)を選ぶ
  2. ランダムにサンプルを選ぶ

です。もちろん 1. と 2. とを組み合わせて、ランダムに説明変数とサンプルとを選ぶやり方もあります。とにかくたくさんモデルを作りましょう!

たとえば、200サンプルについて100の説明変数と1つの目的変数があり、回帰分析を行うことを考えます。このとき、ランダムに50の説明変数を選んで目的変数との間で回帰モデルを作ることを、300回繰り返しましょう!これで300の回帰モデルが得られます。ランダムに100サンプルを選んで100の説明変数と1つの目的変数との間でモデルを構築することを、たとえば500回繰り返して、500個の回帰モデルを作ってもよいですね。さっき作った300のモデルと合わせると800個にもなります!

ふー。さて、次は予測することを考えます。新しいサンプルを800個のモデルに入力すると、800個の目的変数の推定値が得られます。これらの平均値もしくは中央値を最終的な目的変数の推定値とするわけです。これは回帰分析の場合です。クラス分類の場合は、複数の推定値の多数決をとって、最終的な推定値としています。

ちなみに、ランダムフォレスト (Random Forest, RF) ではアンサンブル学習がすでに取り入れられています。ランダムに説明変数とサンプルとを選んで、たくさん決定木を作ってますよね。RFは、決定木でアンサンブル学習を行なった、って感じです。

で、アンサンブル学習のメリットって何?

アンサンブル学習のメリットは2つあります。それらは、

  1. 精度が上がる
  2. 推定値の信頼性を評価できる

です。順に説明します。

1. アンサンブル学習で精度が上がる

一言でいえば・・・

三人寄れば文殊の知恵

です。凡人であっても、凡人が三人集まって考えれば、すばらしい知恵が出るというやつです。

たとえば正解率が70%しかないクラス分類モデルであっても、3つのモデルを集めて多数決を取れば、正解率が上がることがあります。さらにたくさんモデルを集めて、よりいっそう正解率をあげよう!っていう試みです。

では、どのようにすればより精度が上がるようになるのでしょうか?

2つの方法があります。

a. 異なるモデルをたくさん作る

一つ目の方法は、異なるモデルをたくさん作ることです。全く同じことを考える凡人をいくら集めても何も変わらないのと同じで、回帰モデルやクラス分類モデルとしても、似てないモデルをたくさん準備したほうがよいです。ここ、とても大事です。一つ一つのモデルの性能を上げるより、それらのモデルが似ていないほうがよいです。ランダムに説明変数やサンプルを選択した理由はここにあります。もちろん、性能が上がるように説明変数やサンプルを選ぶやり方もありますが、これですと毎回同じような説明変数やサンプルが選ばれちゃうんですよね・・・。これじゃあ意味がありません。やっぱりランダムに選択です。

ただ、ランダムに選択する以上にすぐれた方法もあります。積極的に似ていないモデルを作る方法です。Adaboostと呼ばれている方法は、たくさんクラス分類モデルを作るときに、これまでのモデルで、不正解になってしまったサンプルにより大きな重みをつけて、新しいモデルを作ります。これを繰り返すことで以前のモデルが正解できなかったサンプルを正解するモデル、つまり以前のモデルと異なるモデルを作ることができます。

異なるモデルを作るという点では、いろいろな回帰分析手法を使うとよいです。たとえば、最初の100個のモデルはPLSでつくって、次の100個のモデルはSVRでつくって、最後の100個のモデルはRFでつくる、といった具合です。

このように、なるべく異なるモデルをたくさん作ることで、全体として最終的な推定値の性能が上がります。

b. それぞれのモデルに適切な重みをつける

2つ目の方法は、それぞれのモデルに適切な重みをつけることです。3人いたとして、仮に理系の人・文系の人・芸術系の人としましょう。3人でいろいろな問題を解くとき、問題の種類によって得意な人が問題を解いたほうが、完全に多数決にするよりよいですよね。理系の問題は理系の人が解いて、文系の問題は文系の人が解いて、芸術系の問題は芸術系の人が解いて、スポーツの問題は多数決を取りましょう、みたいな感じです。3人より多いときも、全員で多数決を取るより、その問題のジャンルに得意な人たちだけで解いたほうが正解に近づけます。

アンサンブル学習にも同じような考え方があります。

これまでのアンサンブル学習では、たくさんモデルを準備した後に新しいサンプルの推定をするときは、回帰分析であれば複数の推定値の平均値もしくは中央値をとり、クラス分類モデルでは多数決をとりました。これは、すべてのモデルの重みは等しい、ということになります。しかし、もし新しいサンプルをちゃんと予測できるかどうか、得意 or 不得意が数値として表せれば、それを重みとして重み付け平均を計算したり、重み付け多数決をとったりしたほうがよいわけです。

『どうやって重みをつければいいんだ!』という意見は必ずあります。しかし、この重み付けはとてもむずかしい問題であり、さらに、同じ回帰分析・クラス分類でも、課題の条件や解析の目的によって適した重みのつけ方は異なります。この重み付けの問題についてはまたのちほど記事にしますね。

2. アンサンブル学習で推定値の信頼性を評価できる

アンサンブル学習のメリットの2つ目は、推定値の信頼性を評価できる、です。たくさんのモデルが作られますので、新しいサンプルについてはたくさんの推定値が得られます。回帰分析では平均値や中央値を計算し、クラス分類では多数決をとっていました。もっとこれらのたくさんの推定値を活用したいですよね。

クラス分類において、たとえば101個の推定値があったとき、101個ともクラス1と判断していたら、信頼性は高そうです。別のパターンとして、51個はクラス1、50個はクラス2と判断していても、多数決をとってクラス1と最終的に推定されます。しかしこちらの場合、101個ともクラス1と推定されたときより信頼できないですよね。

回帰分析において、たくさんの推定値がだいたい9から11までの間に分布していて、平均値をとって最終的な推定値が10になったとします。このとき、『10って推定されたけど、実際は9から11くらいの間に正解がありそうだな』ってなります。別のパターンとして、たくさんの推定値がだいたい0から20までの間に分布していて、平均値をとって最終的な推定値が10になったとします。このときは、『10って推定されたけど、実際は0から20くらいの間に正解がありそうだな』ってなります。同じ推定値10でも大きな違いです。

まとめると、

  • 回帰分析: たくさんの推定値の標準偏差 (ばらつき具合)
  • クラス分類: たくさんの推定値のクラスごとの割合

を評価して推定値の信頼性とします。

そして回帰分析の場合は、3シグマ法にならって、平均値より標準偏差の3倍だけ小さい値から、平均値より標準偏差の3倍だけ大きい値までの間に実際の正解はあるだろう、と考えます。

クラス分類の場合は、各クラスの割合が、正解がそのクラスになる確率として考えます。

このようにして、推定値だけでなくその分布も見ることで、推定値の信頼性を評価するわけです。実は、これはまさしく、モデルの適用領域を設定することになるのです。アンサンブル学習を行うと半自動的にモデルの適応領域を決められちゃいます!

まとめ

今回はアンサンブル学習による回帰分析・クラス分類の2つのメリット

  1. 精度が上がる
  2. 推定値の信頼性を評価できる

について解説しました。アンサンブル学習を行うことで、モデル性能が向上するだけでなく、モデルの適用領域も考慮できちゃいます。みなさんもぜひアンサンブル学習を活用して、機械学習・データマイニングでどんどん成果をあげてください!

ちなみに、たった1つのデメリットはこちらです。

ご案内。

オススメ記事セレクション。

twitterでも発信中。

無料メルマガでブログにない情報を配信中。

バックナンバーと登録はこちら