SnapCrab_2017-2-27_21-3-17_No-00

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

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

前回のLabel Propagation(LP)とサポートベクターマシン(Support Vector Machine, SVM)とを組み合わせた半教師あり学習法によるクラス分類に引き続き、今回も半教師あり学習のお話です。

LS+SVMのプログラムを簡単に入手できます!

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

Python (LS+SVM): note SPIKE

Label Spreading(LS)+サポートベクターマシン(Support Vector Machine, SVM)で半教師あり学習[多クラス分類も対応]

LP+SVMについてはこちらをご覧ください。

Label Propagation(LP)とサポートベクターマシン(Support Vector Machine, SVM)とを組み合わせた半教師あり学習法 : 大学教授のブログ (データ分析相談所)

LSもSPと同様に半教師あり学習法の一つです。Yの値が得られているデータセットだけでなく、Yの値のないデータセットも一緒に使ってクラス分類モデルを構築します。

LPではYの値のあるデータセットについてはサンプルのYの値は変わりませんが、LSではYの値のあるサンプルもYの値が変わる可能性があります。そしてその変わりやすさをαというパラメータでコントロールします。LSの方がLSより柔軟にクラス分類できます。ただ、類似度にガウシアンを使った場合、LPではγだけ最適化すれば良いですが、LSではγに加えてαも最適化する必要があり注意が必要です。

LSでYの値のないサンプルにYの値を割り振ってから、すべてサンプルを使ってSVMモデルを構築します。LSでもガウシアンが用いられているため、ガウシアンカーネルを使うSVMと相性がよいです。LSでYの値のないサンプルも有効に活用して、SVMにより高性能なモデルを構築することで、良好なクラス分類結果が得られると期待できます。

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

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

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

これを書いた人

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

note : https://note.mu/univprof

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

twitter:https://twitter.com/univprofblog1

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

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

こちらへお願いします!

ご案内。

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

twitterでも発信中。

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