SnapCrab_2017-2-25_17-50-53_No-00

こんにちは!大学教員ブロガーのねこしです。

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

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

Label Propagation(LP)とサポートベクターマシン(Support Vector Machine, SVM)とを組み合わせることで、SVMに基づく半教師あり学習法になるお話です。

LP+SVMのプログラムを簡単に入手できます!(多クラス分類にも対応)

それぞれのURLからお求めください!noteでもSPIKEでも言語が同じであれば同じものです。多クラス分類にも対応したものになっています。

Python (LP+SVM): note SPIKE

Label Propagation(LP)+サポートベクターマシン(Support Vector Machine, SVM)で半教師あり学習

通常、クラス分類モデルを作るときは、目的変数Yの値が得られているデータセットのみ用いてクラス分類手法でモデルを作りますが、半教師あり学習ではYの値が得られているデータセットだけでなく、Yの値のないデータセットも一緒に使ってクラス分類モデルを構築します。一般的なYの値が得られているデータセットのみ使うのが教師あり学習、データの見える化・可視化のようにYの値がないデータセットを使うのが教師なし学習と呼ばれていることから、両方使う学習を”半”教師あり学習と言うわけです。

半教師あり学習を用いてクラス分類モデルを構築する代表的な方法の一つに、Label Propagation(LP)があります。LPはすべてのサンプルの間の類似度(どれだけ似ているか)にもとづいて、Yの値のないサンプルに対し、それと類似した(似ている)Yの値がサンプルの情報から、Yの値を割り振っていく手法です。あるサンプルの付近に、クラス1のサンプルが多くあると、そのサンプルのクラスも1が割り振られます。このようにYの値のあるサンプル・ないサンプルの両方を用いてクラス分類が行われます。

ただクラス分類には、性能の高いサポートベクターマシン(Support Vector Machine, SVM)を使いたいのが正直なところです。SVMの詳細はこちらをご覧ください。

http://univprof.com/archives/16-02-26-2888783.html

もちろんSVMを半教師あり学習に応用した手法もありますが、最適化が難しかったりハイパーパラメータを決めるのが大変だったり、残念ながら扱いにくいのが現状です。

そこで、LPとSVMを組み合わせた半教師あり学習を考えます。LPでYの値のないサンプルにYの値を割り振ってから、すべてサンプルを使ってSVMモデルを構築します。なぜSVMと組み合わせるのがLPなのかというと、SVMでは主にガウシアンカーネルが用いられていますが、LPの類似度でも同じガウシアンが用いられていて、相性がよいためです。LPでYの値のないサンプルも有効に活用して、SVMにより高性能なモデルを構築することで、良好なクラス分類結果が得られると期待できます。

LP+SVMは以下の手順で行います。

  1. C, γの候補を決める
    例えば、
    C: 2-10,  2-9,  …,  214,  215
    γ: 2-20,  2-19,  …,  29,  210
    とします。
  2. クラス(カテゴリー)の情報がある説明変数(記述子・特徴量・入力変数)のデータとクラスの情報がない説明変数のデータとをつなげる
  3. 説明変数をオートスケーリングする
    オートスケーリングとは各変数から平均値を引いて平均を0にし、各変数を標準偏差で割って標準偏差を1にする操作です。
  4. γのそれぞれの値でLPのクロスバリデーションを行い、正解率が最も高くなるγを選ぶ
  5. LPによりクラスの情報がないサンプルにクラスを割り振る
  6. C・γのそれぞれの組み合わせでSVMのクロスバリデーションを行い、正解率が最も高くなるC・γを選ぶ
  7. 最適化されたC・γの組み合わせによりSVMモデルを構築する
  8. 最適化されたC・γの組み合わせにおける、目的変数の計算値と実測値との間で混同行列を計算し、最適化されたC・γの組み合わせにおける、目的変数のクロスバリデーション予測値と実測値との間で混同行列を計算する

ここまでお読みいただきありがとうございます。ぜひ上にあるLP+SVMのプログラムもご活用ください。

これを書いた人

ブログ:http://univprof.com/

note : https://note.mu/univprof

コード・プログラムのショップ : https://spike.cc/shop/univprof

twitter:https://twitter.com/univprofblog1

ぜひフォローをお願い致します。

データ解析の質問 募集中!

こちらへお願いします!

ご案内。

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

twitterでも発信中。

この記事に興味を持っていただけましたら、ぜひフォローをお願いします!