2016-05-23_21h15_26

データ解析の手順』 における 「5.回帰モデルもしくはクラス分類モデルを作る」についてです。なお実行するためのプログラムについてはこちらをご覧ください。

公開中のプログラム・コード一覧(実用的かつ実践的なデータ解析・機械学習・データマイニング) : 大学教授のブログ

SVRにより回帰モデルを構築することができます。

[New] SVRのプログラムを簡単に入手できるようになりました!

それぞれのURLからお求めください!

MATLAB: https://spike.cc/shop/univprof/products/CJmwu9Q1

R: https://spike.cc/shop/univprof/products/4XECL0JU

Python: https://spike.cc/shop/univprof/products/jQdVLPGl

Support Vector Regression (SVR)

SVRではまずはじめにカーネル関数を決定しなければなりません。もちろんデータセットに応じて最適なカーネル関数は異なると思いますが、ガウシアンカーネルを使用すればまず間違いありません。パイパーパラメータの数も一つと少ない方ですし、変数間の非線形性も考慮できます。ここではガウシアンカーネルを使用したSVRの解析方法について説明します。

また今回はε(イプシロン)–SVRについて述べますが、ν(ニュー)-SVRでも以下の説明のεのところをνに変えるだけで対応可能です。

SVRはPLSと比較すると、一回のモデル構築やクロスバリデーションに時間がかかったり、PLSでは成分数という一つのハイパーパラメータのみ最適化すればよかったのですがSVRでは3つも最適化すべきハイパーパラメータがあり、解析に時間がかかります。

今回は中でも効率的に解析できる方法を紹介します。

ただし、一度モデルが構築されてしまえば新しいデータに対する推定にはほとんど時間はかかりません。

  1. 説明変数・目的変数をオートスケーリングする
    オートスケーリングとは各変数から平均値を引いて平均を0にし、各変数を標準偏差で割って標準偏差を1にする操作です。
  2. C, ε, γの候補を決める
    例えば、
    C: 2-10,  2-9,  …,  214,  215
    ε: 2-15,  2-14,  …,  29,  210
    γ: 2-20,  2-19,  …,  29,  210
    とします。
  3. γの値ごとにカーネル行列を計算し、その分散を計算する
    たとえばカーネル行列が100×100の行列であったときは、単純に10000×1のベクトルになおして分散を計算します。 
  4. 分散の大きさが最大となるγの値を最適値として決定する
    分散が最大となるγを選ぶことで、多様な値をもつカーネル行列となります。 
  5. 上で最適化したγを固定して、Cとεのすべての候補の組み合わせにおいてクロスバリデーションにより目的変数の推定値を得る 
    クロスバリデーションとして、leave-one-outクロスバリデーションが有名ですが、オーバーフィッティングを起こしやすいため、5-foldクロスバリデーションや2-foldクロスバリデーションが望ましいです。つまり、データを一つ取り除いてそれ以外でモデルを構築して、取り除いた一つを推定することを繰り返すのではなく、あらかじめデータセットを5個または2個のグループに分けておき、1グループを取り除いてそれ以外のグループでモデルを構築して、取り除いた1グループを予測することを繰り返します。
  6. Cとεとの候補の組み合わせごとに、目的変数の実測値と推定値との間でRoot-Mean-Squared Error (RMSE) を計算する
  7. RMSEの値が最小となるCとεとの組み合わせを最適値とする 
  8. 最適化されたC・ε・γの組み合わせによりSVRモデルを構築する 
  9. 最適化されたC・ε・γの組み合わせにおける、目的変数の計算値と実測値との間で決定係数・RMSE (r2C・ RMSEC)を計算し、同じく最適化されたC・ε・γの組み合わせにおける、目的変数のクロスバリデーション予測値と実測値との間で決定係数・RMSE (r2CV・RMSECV)を計算する
    r2Cは目的変数の持つ情報の何割を説明できるモデルかを表します。
    RMSECはモデルのもつ平均的な誤差を表します。
    r2CVは目的変数のもつ情報の何割を新しいデータに対して推定できる可能性があるかを表します。
    RMSECVは新しいデータを推定した場合に平均的な誤差はどれくらいになるかを表します。
    もちろんクロスバリデーションは、完全な外部データを用いた検証方法ではないため、r2CV・RMSECVが適切に『新しいデータ』に対する性能を表現しているわけではありませんが、その指標にはなります。
    r2CVが大きく、RMSECVが小さいモデルが良いモデルです。
    またr2Cとr2CVとの差が大きかったり、RMSECとRMSECVとの差が大きかったりすると、モデルがオーバーフィットしている危険があります。
  10. 目的変数の実測値と計算値とのプロット、そして実測値と推定値とのプロットを確認する
    これにより外れ値がないか確認できます
  11. [新しいデータの推定をするとき] 説明変数の新しいデータから、オートスケーリングした時の説明変数の平均値を引き、標準偏差で割る
  12. [新しいデータの推定をするとき] 上の8.で得られたSVRモデルにより目的変数の推定値を計算する 
  13. [新しいデータの指定をするとき] 推定値にオートスケーリングした時の目的変数の標準偏差をかけて平均値を足す(元のスケールに戻す) 

新しいデータを推定する際に工夫が必要なのは、最終的に得られたSVRモデルは、説明変数・目的変数がそれぞれオートスケーリングされた後のモデルであるためです。そこで、新しく推定したい説明変数のデータがあれば、そのデータからオートスケーリングした時の説明変数の平均値を引き、標準偏差で割ってからSVRモデルにより目的変数の推定値を計算し、その推定値にオートスケーリングした時の目的変数の標準偏差をかけて平均値を足す(元のスケールに戻す)必要があります。