SVM実践ガイド (A Practical Guide to Support Vector Classification)

80,826 views

Published on

A Practical Guide to Support Vector Classification の解説資料

Published in: Technology

SVM実践ガイド (A Practical Guide to Support Vector Classification)

  1. 1. SVM実践ガイドA Practical Guide to Support Vector Classification by Chin-Wei Hsu, Chinh-Chung Chang, and Chih-Jen Lin 2012-06-24 Yoshihiko Suhara @sleepy_yoshi
  2. 2. この資料は何?• SVMツールの使い方について簡潔にまとめた資料• A Practical Guide to Support Vector Classification – by Chin-Wei Hsu, Chinh-Chung Chang, and Chih-Jen Lin – http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf 2
  3. 3. 本資料の概要• LIBSVM, LIBLINEARなどの広く利用されている ツールの性能を引き出す基本的なお作法 – データの前処理 • カテゴリの素性表現,スケール調整 – パラメータを選択方法 • Cross-validation と Grid-search – 具体例を交えて紹介 知っている人にはアタリマエ. 知らない人にはナニソレ?なお作法 3
  4. 4. 対象読者• 想定する知識 – 教師あり学習という言葉は知っている – LIBSVMやLIBLINEARといったツールを使ったことがある/ 使うことができる程度の知識• こんな方にお薦め – Cパラメータって何? – SVMを利用しているがパラメータ調整をどうしたらいいの かよくわからない – 中身の理解は後回しでいいから良い性能を出したい – 自己流で使ってきたけれど,一度使い方を復習したい 4
  5. 5. SVMとカーネルの簡単な説明 ちゃんとした説明は他の資料を参照のこと 5
  6. 6. SVMとは• マージン最大化学習を行う二値分類器 – C: 誤りに対するペナルティパラメータ • C大 ⇒ 誤りを許容しない (= ハードマージンに近づく) • C小 ⇒ 誤りを許容する 𝑙 1 𝑇 min 𝒘 𝒘+ 𝐶 𝜉𝑖 𝒘,𝑏,𝝃 2 𝑖=1 subject to 𝑦 𝑖 𝒘 𝑇 𝜙 𝒙 𝑖 + 𝑏 ≥ 1 − 𝜉 𝑖, 𝜉 𝑖 ≥ 0. こんな問題を解く (知らなくてよい) 6
  7. 7. カーネル関数• 写像された高次元空間における内積を計算する関数 – 線形カーネル以外のカーネル関数を用いることで非線形な 識別関数を学習できる• 基本的なカーネル関数 – 線形カーネル: 𝐾 𝒙 𝑖 , 𝒙 𝑗 = 𝒙 𝑖𝑇 𝒙 𝑗 𝑑 – 多項式カーネル: 𝐾 𝒙 𝑖 , 𝒙 𝑗 = 𝛾𝒙 𝑖𝑇 𝒙 𝑗 + 𝑟 , 𝛾>0 2 – RBFカーネル (*1): 𝐾 𝒙 𝑖 , 𝒙 𝑗 = exp −𝛾 𝒙 𝑖 − 𝒙 𝑗 , 𝛾>0 – シグモイドカーネル: 𝐾 𝒙 𝑖 , 𝒙 𝑗 = tanh(𝛾𝒙 𝑖𝑇 𝒙 𝑗 + 𝑟) (*1) 正確にはガウスカーネル.本稿での呼び方に倣ってRBFカーネルと呼ぶ (*2) 𝛾, 𝑟, 𝑑はカーネルパラメータ 7
  8. 8. 初心者がやりがちな手順と オススメ手順 8
  9. 9. 多くの初心者がやりがちな手順 1. データをSVMパッケージの入力形式に変換する2. 適当に選択したいくつかのカーネルとパラメータを 試す3. テストデータに対して適用する 9
  10. 10. オススメ手順 1. データをSVMパッケージの入力形式に変換する2. 簡単なスケール調整を行う3. RBFカーネルの利用を検討する4. 交差検定を用いて最適なパラメータ𝐶と𝛾を発見する5. 最適なパラメータを用いて訓練データに対してモデ ルの生成を行う6. テストデータに対して適用する 10
  11. 11. オススメ手順を使うと 初心者がやりがち オススメ手順を な手順を使った 使った場合の 場合の精度  精度  11
  12. 12. データ処理の留意点 12
  13. 13. カテゴリ素性• SVMは素性を実数として扱う• m種類の値を取りうる素性を1個の素性で表現す るのではなく,m個のバイナリ素性で表現する – 素性数が膨大にならない限り,経験上,結果が安定 する• 例: {red, green, blue} – 1次元素性 (-1), (0), (1) で表現するのではなく, – 3次元素性 (0,0,1), (0,1,0), (1,0,0) で表現した方がよい 13
  14. 14. スケール調整• SVMを利用する前にスケール調整することは とても大切• スケーリングが大切な理由 – 値の取りうる範囲が大きい素性が支配的になる という問題を解消するため – 数値計算上の理由で好ましいため • 基本的なカーネル関数では素性ベクトルの内積を用 いるため,スケール調整をしないと情報落ち誤差が発 生するおそれがある 14
  15. 15. モデル選択 15
  16. 16. モデル選択• (1) カーネル関数の選択• (2) ペナルティパラメータ𝐶の選択• (3) カーネルパラメータの選択 本当はSVMを使うということもある意味でのモデル選択. 何を人手で決めて,何をデータによって決めるか. 16
  17. 17. (1) カーネル関数の選択• RBFカーネルが最初の選択肢 – 高次元の非線形空間に写像する• RBFカーネルを使う理由 – 線形カーネルはRBFカーネルの特殊系 • パラメータ𝐶 の線形カーネルモデルに対応するパラメータ (𝐶, 𝛾)のRBFカーネルと同じ性能を示す • シグモイドカーネルもRBFカーネルと同じように動作 – 調整すべきカーネルパラメータが1つ • 多項式カーネルの場合,2つ – 数値計算上の理由 17
  18. 18. Cross-validation と Grid-search 18
  19. 19. やるべきこと• カーネル関数はRBFカーネルを使うことに決 めた• 調整すべきパラメータは 𝐶 と 𝛾 –  ただし最適なパラメータがわからない 19
  20. 20. Cross-validation (交差検定)• 訓練データとテストデータ – テストデータは本来未知のデータ• 訓練データをk分割 – k-1ブロックのデータを用いて訓練 – 1ブロックのデータを用いて疑似的にテスト訓練データ このうち1ブロックを除いたデー k分割 タで訓練したモデルを使って1ブ ロックのデータを評価 (これを k回繰り返す) 20
  21. 21. 交差検定をしない場合•  訓練データにオーバーフィットしてしまい, テストデータに対してうまく働かない 21
  22. 22. 交差検定をした場合•  訓練データに対するオーバーフィットを避ける ことができ,テストデータに対してもうまく働く 22
  23. 23. Grid-search (グリッド探索)• パラメータ 𝐶, 𝛾 を網羅的に探索する – 右下図の赤い点を絨毯爆撃するイメージ – 経験的に指数増加列がよい • 例) 𝐶 = 2−5 , 2−3 , … , 215 , 𝛾 = 2−15 , 2−13 , … , 23• Grid-searchを用いる理由 log 2 𝛾 – 網羅的なので安心 – RBFカーネルの場合,探索パラメー タが2つのため,コストが高くない – 並列化が容易 log 2 𝐶 23
  24. 24. 粗い探索をしてから 精度 (%)ここが良さそう! 24
  25. 25. 細かい探索を行う 精度 (%) よりよいパラメータ を発見 25
  26. 26. 提案手順の実例 26
  27. 27. Astroparticle Physics データ (1/2)• デフォルトパラメータ• デフォルトパラメータ+スケール調整 27
  28. 28. Astroparticle Physics データ (2/2)• パラメータ選択+スケール調整デフォルト → スケール調整 → パラメータ選択+スケール調整 66.93% → 96.15% → 96.88% 28
  29. 29. Bioinformatics データ (1/2)• デフォルトパラメータ• デフォルトパラメータ+スケール調整 29
  30. 30. Bioinformatics データ (2/2)• パラメータ選択+スケール調整デフォルト → スケール調整 → パラメータ選択+スケール調整 56.52% → 78.52% → 85.12% 30
  31. 31. Vehicle データ (1/2)• デフォルトパラメータ• デフォルトパラメータ+スケール調整 31
  32. 32. Vehicle データ (2/2)• パラメータ選択+スケール調整デフォルト → スケール調整 → パラメータ選択+スケール調整 2.44% → 12.20% → 87.80% 32
  33. 33. easy.py の使い方• スケール調整+パラメータ選択を自動的に実行 訓練データ テストデータ 33
  34. 34. よくあるミス 34
  35. 35. スケール調整でよくあるミス• 訓練データとテストデータで異なるスケール調整を行って しまう⇒ 同じスケール調整を行う×○ 35
  36. 36. (RBFカーネルではなく)線形カーネルを使うケース 36
  37. 37. 線形カーネルを使うケース• 特徴次元数が大きい場合,高次元に写像する必要がない – 精度向上が見込めないことがある• そのような場合は線形カーネルで十分 – 調整パラメータがCだけで済む – RBFカーネルも線形カーネル相当ということを述べたが,(C, γ) の調整が必要• 以下の3つのケースに分けて解説 – (1) 事例数 ≪ 素性数 – (2) 事例数も素性数も大きい場合 – (3) 事例数 ≫ 素性数 37
  38. 38. (1) 事例数 ≪ 素性数の場合 (1/2)• 線形カーネルで十分 – 高次元に写像する必要がない – 線形カーネルの場合,LIBLINEARも利用可能• バイオインフォマティクスのマイクロアレイデータの 多くがこのケース – 例) Leukemia data • #training=38, #test=34, #feature=7,129 38
  39. 39. (1) 事例数 ≪ 素性数の場合 (2/2)訓練データとテストデータを結合して交差検定の精度で比較• RBFカーネル• 線形カーネル 39
  40. 40. (2) 事例数も素性数も大きい場合• LIBSVMは苦手とするケース• LIBLINEARの利用を考える – 線形カーネルしか利用できないが,LIBSVMとは 最適化手法が異なり,LIBSVMより高速に学習可 能 40
  41. 41. LIBSVM vs. LIBLINEAR• 速度と精度の比較 線形カーネル 速度でLIBLINEARがLIBSVMを上回る 精度が微妙に変わるのは最適化手法が異なるため (どちらが良いかはケースバイケース) 41
  42. 42. (3) 事例数 ≫ 素性数• 素性数が少なく,事例数が多い場合には非線形カーネ ルを利用して高次元に写像する方がよい• もし線形カーネルを利用する場合には,LIBLINEARの-s 2 オプションを用いると高速に学習が可能 この速度差も最適化手法の違いによるもの 42
  43. 43. まとめ• 覚えておくこと – オススメ手順 – 迷ったらRBFカーネルときどき線形カーネル – スケール調整とパラメータ選択は大切• 今回扱わなかった話題 – 素性選択 – 非線形カーネルの選択 43
  44. 44. (再掲) オススメ手順 1. データをSVMパッケージの入力形式に変換する2. 簡単なスケール調整を行う3. RBFカーネルの利用を検討する4. 交差検定を用いて最適なパラメータ𝐶と𝛾を発見する5. 最適なパラメータを用いて訓練データに対してモデ ルの生成を行う6. テストデータに対して適用する 44
  45. 45. おしまい 45

×