2016-05-23_21h25_05

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

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

SVMによりクラス分類モデルを構築できます。

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

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

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

R: https://spike.cc/shop/univprof/products/k38SYnxl

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

Support Vector Machine (SVM)

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

また今回はC-SVMについて述べますが、ν-SVMでも以下の説明のCのところをνに変えるだけで対応できます

なお各カテゴリのデータ数は等しいことが望ましいです。例えば2つのクラスを分類する場合は、各クラスのデータ数がより同じであることが望ましいです。SVMの場合は主に2クラス分類であり、あるクラスの目的変数の値は1、
もう一つのクラスの目的変数の値は-1となります。

  1. 説明変数をオートスケーリングする
    オートスケーリングとは各変数から平均値を引いて平均を0にし、各変数を標準偏差で割って標準偏差を1にする操作です。
  2. C, γの候補を決める
    例えば、
    C: 2-10,  2-9,  …,  214,  215
    γ: 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の候補ごとに目的変数の実測値と推定値との間で正解率を計算する
  7. 正解率の値が最大となるCを最適値とする
  8. 最適化されたC・γの組み合わせによりSVMモデルを構築する
  9. 最適化されたC・γの組み合わせにおける、目的変数の計算値と実測値との間で混同行列を計算し、最適化されたC・γの組み合わせにおける、目的変数のクロスバリデーション予測値と実測値との間で混同行列を計算する。
  10. 必要に応じて、各混同行列から正解率・検出率・精度などを計算する
  11. [新しいデータの推定をするとき] 説明変数の新しいデータから、オートスケーリングした時の説明変数の平均値を引き、標準偏差で割る
  12. [新しいデータの推定をするとき] 上の8.で得られたSVMモデルにより目的変数の推定値を計算する

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