45
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

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

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

この資料は何?

• 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

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

本資料の概要

• LIBSVM, LIBLINEARなどの広く利用されているツールの性能を引き出す基本的なお作法

–データの前処理

• カテゴリの素性表現,スケール調整

–パラメータを選択方法

• Cross-validation と Grid-search

–具体例を交えて紹介

知っている人にはアタリマエ. 知らない人にはナニソレ?なお作法

3

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

対象読者

• 想定する知識 – 教師あり学習という言葉は知っている

– LIBSVMやLIBLINEARといったツールを使ったことがある/使うことができる程度の知識

• こんな方にお薦め – Cパラメータって何?

– SVMを利用しているがパラメータ調整をどうしたらいいのかよくわからない

– 中身の理解は後回しでいいから良い性能を出したい

– 自己流で使ってきたけれど,一度使い方を復習したい

4

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

SVMとカーネルの簡単な説明 ちゃんとした説明は他の資料を参照のこと

5

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

SVMとは

• マージン最大化学習を行う二値分類器 – C: 誤りに対するペナルティパラメータ

• C大 ⇒ 誤りを許容しない (= ハードマージンに近づく) • C小 ⇒ 誤りを許容する

min𝒘,𝑏,𝝃

1

2𝒘𝑇𝒘 + 𝐶 𝜉𝑖

𝑙

𝑖=1

subject to 𝑦𝑖 𝒘𝑇𝜙 𝒙𝑖 + 𝑏 ≥ 1 − 𝜉𝑖 ,

𝜉𝑖 ≥ 0.

こんな問題を解く (知らなくてよい)

6

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

カーネル関数

• 写像された高次元空間における内積を計算する関数

– 線形カーネル以外のカーネル関数を用いることで非線形な識別関数を学習できる

• 基本的なカーネル関数 – 線形カーネル: 𝐾 𝒙𝑖 , 𝒙𝑗 = 𝒙𝑖

𝑇𝒙𝑗

– 多項式カーネル: 𝐾 𝒙𝑖 , 𝒙𝑗 = 𝛾𝒙𝑖𝑇𝒙𝑗 + 𝑟

𝑑, 𝛾 > 0

– RBFカーネル (*1): 𝐾 𝒙𝑖 , 𝒙𝑗 = exp −𝛾 𝒙𝑖 − 𝒙𝑗2

, 𝛾 > 0

– シグモイドカーネル: 𝐾 𝒙𝑖 , 𝒙𝑗 = tanh(𝛾𝒙𝑖𝑇𝒙𝑗 + 𝑟)

(*1) 正確にはガウスカーネル.本稿での呼び方に倣ってRBFカーネルと呼ぶ (*2) 𝛾, 𝑟, 𝑑はカーネルパラメータ 7

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

初心者がやりがちな手順と オススメ手順

8

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

多くの初心者がやりがちな手順

1. データをSVMパッケージの入力形式に変換する

2. 適当に選択したいくつかのカーネルとパラメータを試す

3. テストデータに対して適用する

9

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

オススメ手順

1. データをSVMパッケージの入力形式に変換する

2. 簡単なスケール調整を行う

3. RBFカーネルの利用を検討する

4. 交差検定を用いて最適なパラメータ𝐶と𝛾を発見する

5. 最適なパラメータを用いて訓練データに対してモデルの生成を行う

6. テストデータに対して適用する

10

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

オススメ手順を使うと

初心者がやりがちな手順を使った 場合の精度

オススメ手順を使った場合の精度

11

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

データ処理の留意点

12

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

カテゴリ素性

• SVMは素性を実数として扱う

• m種類の値を取りうる素性を1個の素性で表現するのではなく,m個のバイナリ素性で表現する – 素性数が膨大にならない限り,経験上,結果が安定する

• 例: {red, green, blue} – 1次元素性 (-1), (0), (1) で表現するのではなく,

– 3次元素性 (0,0,1), (0,1,0), (1,0,0) で表現した方がよい

13

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

スケール調整

• SVMを利用する前にスケール調整することはとても大切

• スケーリングが大切な理由

–値の取りうる範囲が大きい素性が支配的になるという問題を解消するため

–数値計算上の理由で好ましいため

• 基本的なカーネル関数では素性ベクトルの内積を用いるため,スケール調整をしないと情報落ち誤差が発生するおそれがある

14

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

モデル選択

15

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

モデル選択

• (1) カーネル関数の選択

• (2) ペナルティパラメータ𝐶の選択

• (3) カーネルパラメータの選択

本当はSVMを使うということもある意味でのモデル選択. 何を人手で決めて,何をデータによって決めるか.

16

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

(1) カーネル関数の選択

• RBFカーネルが最初の選択肢 – 高次元の非線形空間に写像する

• RBFカーネルを使う理由 – 線形カーネルはRBFカーネルの特殊系

• パラメータ𝐶 の線形カーネルモデルに対応するパラメータ(𝐶, 𝛾)のRBFカーネルと同じ性能を示す

• シグモイドカーネルもRBFカーネルと同じように動作

– 調整すべきカーネルパラメータが1つ • 多項式カーネルの場合,2つ

– 数値計算上の理由

17

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

Cross-validation と Grid-search

18

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

やるべきこと

• カーネル関数はRBFカーネルを使うことに決めた

• 調整すべきパラメータは 𝐶 と 𝛾

– ただし最適なパラメータがわからない

19

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

Cross-validation (交差検定)

• 訓練データとテストデータ – テストデータは本来未知のデータ

• 訓練データをk分割 – k-1ブロックのデータを用いて訓練

– 1ブロックのデータを用いて疑似的にテスト

訓練データ

k分割 このうち1ブロックを除いたデータで訓練したモデルを使って1ブ

ロックのデータを評価 (これを k回繰り返す)

20

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

交差検定をしない場合

• 訓練データにオーバーフィットしてしまい,テストデータに対してうまく働かない

21

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

交差検定をした場合

• 訓練データに対するオーバーフィットを避けることができ,テストデータに対してもうまく働く

22

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

Grid-search (グリッド探索)

• パラメータ 𝐶, 𝛾 を網羅的に探索する

–右下図の赤い点を絨毯爆撃するイメージ

–経験的に指数増加列がよい

• 例) 𝐶 = 2−5, 2−3, … , 215, 𝛾 = 2−15, 2−13, … , 23

log2 𝐶 lo

g2𝛾

• Grid-searchを用いる理由 – 網羅的なので安心 – RBFカーネルの場合,探索パラメータが2つのため,コストが高くない

– 並列化が容易

23

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

粗い探索をしてから

ここが良さそう!

精度 (%)

24

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

細かい探索を行う

精度 (%)

よりよいパラメータを発見

25

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

提案手順の実例

26

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

Astroparticle Physics データ (1/2)

• デフォルトパラメータ

• デフォルトパラメータ+スケール調整

27

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

Astroparticle Physics データ (2/2)

• パラメータ選択+スケール調整

デフォルト → スケール調整 → パラメータ選択+スケール調整

66.93% → 96.15% → 96.88%

28

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

Bioinformatics データ (1/2)

• デフォルトパラメータ

• デフォルトパラメータ+スケール調整

29

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

Bioinformatics データ (2/2)

• パラメータ選択+スケール調整

デフォルト → スケール調整 → パラメータ選択+スケール調整

56.52% → 78.52% → 85.12%

30

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

Vehicle データ (1/2)

• デフォルトパラメータ

• デフォルトパラメータ+スケール調整

31

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

Vehicle データ (2/2)

• パラメータ選択+スケール調整

デフォルト → スケール調整 → パラメータ選択+スケール調整

2.44% → 12.20% → 87.80%

32

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

easy.py の使い方

• スケール調整+パラメータ選択を自動的に実行

訓練データ テストデータ

33

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

よくあるミス

34

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

スケール調整でよくあるミス

• 訓練データとテストデータで異なるスケール調整を行ってしまう

⇒ 同じスケール調整を行う

×

35

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

(RBFカーネルではなく) 線形カーネルを使うケース

36

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

線形カーネルを使うケース

• 特徴次元数が大きい場合,高次元に写像する必要がない – 精度向上が見込めないことがある

• そのような場合は線形カーネルで十分 – 調整パラメータがCだけで済む – RBFカーネルも線形カーネル相当ということを述べたが,(C, γ)の調整が必要

• 以下の3つのケースに分けて解説 – (1) 事例数 ≪ 素性数 – (2) 事例数も素性数も大きい場合 – (3) 事例数 ≫ 素性数

37

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

(1) 事例数 ≪ 素性数の場合 (1/2)

• 線形カーネルで十分

– 高次元に写像する必要がない

– 線形カーネルの場合,LIBLINEARも利用可能

• バイオインフォマティクスのマイクロアレイデータの多くがこのケース

– 例) Leukemia data • #training=38, #test=34, #feature=7,129

38

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

(1) 事例数 ≪ 素性数の場合 (2/2)

• RBFカーネル

• 線形カーネル

訓練データとテストデータを結合して交差検定の精度で比較

39

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

(2) 事例数も素性数も大きい場合

• LIBSVMは苦手とするケース

• LIBLINEARの利用を考える

–線形カーネルしか利用できないが,LIBSVMとは最適化手法が異なり,LIBSVMより高速に学習可能

40

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

LIBSVM vs. LIBLINEAR

• 速度と精度の比較 線形カーネル

速度でLIBLINEARがLIBSVMを上回る 精度が微妙に変わるのは最適化手法が異なるため

(どちらが良いかはケースバイケース)

41

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

(3) 事例数 ≫ 素性数

• 素性数が少なく,事例数が多い場合には非線形カーネルを利用して高次元に写像する方がよい

• もし線形カーネルを利用する場合には,LIBLINEARの-s 2オプションを用いると高速に学習が可能

この速度差も最適化手法の違いによるもの 42

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

まとめ

• 覚えておくこと

–オススメ手順

–迷ったらRBFカーネルときどき線形カーネル

–スケール調整とパラメータ選択は大切

• 今回扱わなかった話題

–素性選択

–非線形カーネルの選択

43

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

(再掲) オススメ手順

1. データをSVMパッケージの入力形式に変換する

2. 簡単なスケール調整を行う

3. RBFカーネルの利用を検討する

4. 交差検定を用いて最適なパラメータ𝐶と𝛾を発見する

5. 最適なパラメータを用いて訓練データに対してモデルの生成を行う

6. テストデータに対して適用する

44

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

おしまい

45