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