Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

53
サポートベクターマシン入門 〜オブジェクト自動識別システムの構築〜 @salinger001101 さりんじゃー 1

Transcript of Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

Page 1: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

サポートベクターマシン入門〜オブジェクト自動識別システムの構築〜

@salinger001101 さりんじゃー

1

Page 2: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

自己紹介

•  新潟にある長岡技術科学大学で修士まで6年。•  4月からデータ分析のお仕事始めました。

•  職場まで徒歩0分です。•  主な使用言語

•  Python、R、シェルスクリプト  (+  mcmd)•  Clojure  もちょこちょこ学習中

•  前々回の  Tokyo.R  では  「R  でダイエット」  というタイトルで  LT  しました。

•  http://www.slideshare.net/tojimat/diet-by-r

2

Page 3: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

注意

•  内容は個人の見解であり、所属する組織の公式見解ではありません。

•  って言っとけばだいたいセーフらしい。

•  数式少なめ•  適当な説明になってる部分が多々あり。

3

Page 4: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

今回の内容

1.   はじめに2.   サポートベクターマシンの理論3.   最適化のお話4.   オブジェクトの識別

4

Page 5: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

今回の内容

1.   はじめに2.   サポートベクターマシンの理論3.   最適化のお話4.   オブジェクトの識別

5

Page 6: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

突然ですが…

6

Page 7: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

次の画像を2種類に分けるなら、どのように分ける?

7

Page 8: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

分けるとしたら…

8

Page 9: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

眼鏡っ娘他

9

Page 10: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

もしこの識別がコンピュータで自動化できれば…

10

Page 11: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

  ネットの海

      眼鏡っ娘  分類器

画像を大量に自動収集

大量の眼鏡っ娘画像

=  幸せ  

11

Page 12: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

分類器作成のための機械学習の手法

• サポートベクターマシン• ランダムフォレスト• 単純ベイズ分類器• ニューラルネットワークetc.

今回はこれを詳しく

12

Page 13: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

今回の内容

1.   はじめに2.   サポートベクターマシンの理論3.   最適化のお話4.   オブジェクトの識別

13

Page 14: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

未知の        は        と        どちらに分類される?

14

Page 15: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

2つのグループ間のマージンが最大になるような  P  を決定する

P:  分離超平面

15

Page 16: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

       はどちら側?

P

16

Page 17: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

サポートベクターマシン  (SVM)  とは?

•  教師あり学習  (入力例を与える)•  さっきの例では          &        が学習データ未知の        を分類する        

•  マージン最大化学習を行う2値分類器•  分離超平面を決定する•  線形分類器  (真っ直ぐなものしか切れない)だったのだが…

17

Page 18: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

Q:  じゃあ、こういう場合どうするの?

18

Page 19: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

高次元空間に射影すると…(空間の方をねじ曲げる)

y = Φ(x)

19

Page 20: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

A:  直線で切れる!

20

Page 21: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

これと等価

21

Page 22: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

カーネル法の話

•  非線形なカーネル関数により、非線形な識別関数を学習可能。

•  カーネル関数を取り入れた一連の手法では、どのような写像が行われるか知らずに計算できる。

⇒  カーネルトリック線形以外のカーネル関数を使うと、さっきの図のような変換をやってくれる。

22

Page 23: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

カーネル関数の例

•  線形(Linear)

•  多項式(Polynomial)

•  RBF:  “Gaussian”(Radial  Basis  Function)

•  シグモイド(Sigmoid)

K( ix , jx ) = iTx jx

K( ix , jx ) = exp(−γ iTx − jx

2)

K( ix , jx ) = (γ iTx jx + r)d

(γ > 0)

(γ > 0)K( ix , jx ) = tanh(γ i

Tx jx + r)

基本的に普段使うのは  線形カーネル  と、非線形の  RBFカーネル  ぐらい。RBF  の名前だけは覚えておこう。 23

Page 24: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

マージンの話

•  問題を解く際には、どの程度誤りを許容するかが問題となる。•  コストパラメータ:C  で決定する。

分類精度を向上させるためには適当さも必要

C  が大きい C  が小さい= =

or

24

Page 25: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

実際にSVMを

使いたいときは

これを自力実装?

25

Page 26: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

R  で使える  SVM  のライブラリ

•  e1071•  Libsvm  のアルゴリズム(Chang  and  Lin,  2001)を利用することができる。視覚化やパラメーター調整などを行なえる(Dimitriadou  et  al.,  2005)。

•  kernlab•  カーネル法に基づく  SVM  アルゴリズムを利用できる。そのほかに、libsvm  や  bsvm  (Hsu  and  Lin,  2002)  を改良した柔軟性のある  SVM  を提供している。

•  klaR•  SVMlight  アルゴリズムを利用できる。

26

Page 27: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

今回の内容

1.   はじめに2.   サポートベクターマシンの理論3.   最適化のお話4.   オブジェクトの識別

27

Page 28: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

SVMのダメな使い方

1.   データをSVMで使えるように整形。2.   デフォルトのパラメータで試行。3.   「精度悪いなぁ…」4.   「パラメータの調整とやらで精度が上がるらしいぞ?」5.   適当に選択したカーネルとパラメータで試行。6.   「精度悪いなぁ…別の手法試すか…」

ダメ!絶対!

28

Page 29: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

BETTERな手順

1.   データをSVMで使えるように整形。2.  素性の選択3.   データのスケーリング4.   カーネルの決定5.  交差検定・グリッドサーチにより、最適なコストやカーネルのパラメータを調べる。

6.  実行!

29

Page 30: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

1.  データの整形

•  学習用データ•  「素性ベクトル」  と  「正解ラベル」  のペア

•  本番用のデータ•  学習用に使用した素性ベクトルと同じ要素数からなる素性ベクトル

v1:  [  [0.50,  0.33,  -0.21],                [0.12,  0.98,    1.34],                …                                                    ]

l:  [  1,        -1,        …        ]

v2:  [  [0.23,  0.55,  -0.19],                [0.10,  0.24,    0.78],                …                                                    ]

O:  [  1,            -1,            …        ]

システムの出力

30

Page 31: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

2.  素性の選択(1)

•  数値データ•  そのまま使用 [10.0,  2.5,  6.4,  -8.2]

•  範囲ごとに分割 [10,  0,  5,  -10]

•  バイナリ化 [1,  1,  1,  0]

•  テキストデータ•  単語の出現回数  (n-gram)•  品詞情報  等を数値化

•  画像・音声データ•  元データをそのまま行列からベクトルに•  フィルタリング•  圧縮して単純化•  フーリエ変換・ウェーブレット変換  等

31

Page 32: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

2.  素性の選択(2)

•  次元の呪い  (curse  of  dimensionality)•  超高次元になるとモデルが複雑に

•  学習データが不足する。•  球面集中現象

•  次元の増加に伴って各データ間の距離が互いに等しくなる。

•  まとめられるものはまとめる  ⇒  特徴選択・次元削減      Ex.  単語の出現回数  ⇒  類語をまとめてカウント

32

Page 33: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

3.  スケーリングの話

•  値のとりうる範囲が大きい素性が支配的に•  正規化したほうが良い結果になる場合も

例.   -118  <=  x  <=  200

0  <=  x  <=  1    or    -1  <=  x  <=  1

33

Page 34: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

4.カーネル関数の決定

• 基本はRBFカーネルでOK。(気になる人は後で補足部分読んで)

34

Page 35: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

5.  パラメータの決定

•  RBFカーネルの場合•  コストパラメータ:C•  カーネルパラメータ:γ

• 最適なパラメータは?⇒  交差検定  ・  グリッドサーチ  を利用し決定。

35

Page 36: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

5.1  交差検定

•  訓練データとテストデータの分割方法

1 2 3 4 5 全データをk個に分割

2 3 4 5

テストデータ

訓練データ 1 2 3 4

5〜

•  k  回試行してその平均を利用•  テストデータは常に未知のデータ

⇒  過剰適応  (Over  fitting)  を防げる。

テストデータ

訓練データ

36

Page 37: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

5.2.  グリッドサーチ

•  2種類のパラメータを網羅的に探索•  グラフの赤い点を網羅的に試す。(粗  ⇒  細)•  指数増加列がよい。    Ex.  C  =  2n  (n  =  -5  〜  15),    γ  =  2m  (m  =  -15  〜  3)

0

1

2

3

4

5

6

0 1 2 3 4 5 6

log 2γ

log2C 37

Page 38: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

最適化のまとめ

• 素性の選択大事!• とりあえず、RBFカーネルでOK!• パラメータ調整大事!

38

Page 39: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

今回の内容

1.   はじめに2.   サポートベクターマシンの理論3.   最適化のお話4.   オブジェクトの識別

39

Page 40: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

サンプルコード

•  ここにあります!https://github.com/Salinger/glasses_classifier/blob/master/glasses_classifier.R

•  ただし、学習データセットは含めていないので、サンプルコードを実行したい場合は自分で画像を集めてきてください。

•  ていうか、学習データ足らないので眼鏡っ娘画像持ってる方、ください。

40

Page 41: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

用意したデータ

•  データ数•  学習  &  チューニング用データ

•  眼鏡っ娘画像:  75枚 他:  75枚

計150枚•  テスト用データ  (作成した分類器の動作確認用)

•  眼鏡っ娘画像:  3枚 他:  3枚

計  6枚•  内容

•  ネットで拾ったアニメのキャプ画。•  主に人物単体写ってるもの•  基本顔がはっきりとわかるもの。

41

Page 42: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

biOps ライブラリ  で画像を加工

42

1.  元画像 2.  グレースケール変換

3.  エッジ検出 4.  ダウンサイジング  (48x27)

要素  (次元)  数  1296  の  素性ベクトル(眼鏡:75  個  Not:  75  個  計150個)

5.0〜1になるよう正規化

imgRGB2Grey()

imgCanny()

imgAverageShrink()

vec / 255

Page 43: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

動作確認

•  SVMは  R  の  e1071  ライブラリを利用。•  RBFカーネル  &  デフォルトパラメータで試行。•  交差検定は  分割数  =  学習データ数  とする  Leave-one-out  法  を用いる。

•  今回の場合149個学習させて残り1個を分類

結果やいかに?

43

Page 44: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

動作確認の結果

44

•  2値分類なので、完全ランダムに振り分けたとすると分類精度は理論上  50  %  。

•  ランダムよりはだいぶ良くなってる。

Page 45: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

グリッドサーチで最適なパラメータを決定

45 Gamma

Cos

t

誤分類率

Page 46: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

最適化の結果

•  精度  7割  達成。•  このあたりが単純な手法だと限界っぽい。•  実用化はまだまだっぽい。

46

Page 47: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

テスト用データを分類

47

眼鏡 眼鏡 眼鏡じゃない

眼鏡じゃない 眼鏡じゃない 眼鏡

•  素性ベクトルの作成方法等をもっと工夫すればもっと精度上がるかも。

Page 48: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

眼鏡っ娘いいよねあとSVMって便利だね

本日のまとめ

48

Page 49: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

参考文献

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

http://d.hatena.ne.jp/sleepy_yoshi/20120624/p1

・カーネル法

http://www.eb.waseda.ac.jp/murata/research/kernel

・TAKASHI  ISHIDA HomePage  SVM

http://www.bi.a.u-tokyo.ac.jp/~tak/svm.html

・バイオインフォマティクス  Rで行うSVM解析,  e1071,  kernlab,  klaR  パッケージの使い方  http://bi.biopapyrus.net/compute/r-svm.html

・眼鏡っ娘分類器  サンプルコード(学習データを含んでいないので、そのまま実行はできない)

https://github.com/Salinger/glasses_classifier/blob/master/glasses_classifier.R

49

Page 50: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

補足資料

50

Page 51: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

カーネル関数の決定(1)

•  最初に試すのはRBFカーネル•  事前知識がない場合これが無難•  高次元の非線形空間•  線形カーネルはRBFカーネルの特殊系•  シグモイドカーネルもRBFカーネルとほぼ同じように動作•  γパラメータ  +  Cパラメータ  のみの調整で良い

•  じゃ他のカーネルを使う場合はあるの?

51

Page 52: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

カーネル関数の決定(2)

•  線形カーネルの利点•  高速な  LIBLINEAR  が使用出来る•  Cパラメータのみの調整で良い

•  事前に線形分離できると予想できる場合                ⇒  線形カーネルを用いるほうがいいかも

52

Page 53: Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築

カーネル関数の決定(3)

1.  事例数  <<  素性数  の場合•  素性が高次元なので写像する必要がない•  線形カーネルを使うべき

2.  事例数  >>  素性数  の場合•  非線形カーネルを利用して高次元に写像すべき

3.  事例数も素性数も大きい  場合•  学習に時間がかかる。LIBSVMが苦手なケース

•  線形カーネル  &  LIBLINEARの利用を検討

53