はじパタ8章 svm

33
はじめてのパターン認識 8「サポートベクトルマシーン」 後半  2013/11/26 @リクルート 20131126日火曜日

Upload: tetsuro-ito

Post on 23-Jun-2015

5.140 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: はじパタ8章 svm

はじめてのパターン認識第8章

「サポートベクトルマシーン」後半 

2013/11/26 @リクルート

2013年11月26日火曜日

Page 2: はじパタ8章 svm

あんた誰?

名前           伊藤 徹郎 (@tetsuroito)

所属株式会社ALBERT データ分析部好きなものサッカー、スキー、オレオ!

2013年11月26日火曜日

Page 3: はじパタ8章 svm

アジェンダ

1、動径基底カーネル(RBFカーネル)

2、ν-サポートベクトルマシーン

3、1クラスサポートベクトルマシーン

2013年11月26日火曜日

Page 4: はじパタ8章 svm

ちょっとSVMの復習

SVMは下記のように、分類したい識別境界を求めるのでしたね。

! 識別境界:!Tx + b = 0" !:識別境界の係数ベクトル(学習データから求める)

" x:学習データ(d次元の特徴変数!データ数N→d!Nの 列)

" b:バイアス項(学習データから求める)

!

線形識別関数 !Tx + b = 0

t = +1

t = -1

2013年11月26日火曜日

Page 5: はじパタ8章 svm

ちょっとSVMの復習

制約条件付きの凸計画問題を解く場合、ラグランジュの未定乗数法を用いるSVMの場合は制約条件が不等式となる

主問題評価関数(最小化):Lp(ω) = ½・ωTω ←マージンの最小化不等式制約条件:ti(ωTxi+b) ≧ 1 ←判別

ラグランジュ関数(これで制約付き凸計画を解く)

αiはラグランジュ未定定数α=(α1,・・・, αN)

( ) ( )( )!=

"+"=N

ii

Tii

Tp bxtbL

11

21,,~

#$##$#

2013年11月26日火曜日

Page 6: はじパタ8章 svm

ちょっとSVMの復習

! Ld(!)を最 化する問題を「双対問題」と呼ぶ"" Lp(#)を最 化する#を求めるほうが主問題 !

" 双対問題で対象とするラグランジュ関数

( )

TN

jTijiij

T

TT

N

ii

N

ijjj

N

jiiid

ttt

xxttHH

t

H

xtxtL

),,,(

)(

0211

21

1

11 1

=

==

=

!=

+!= """== =

#

###

####評価関数 (最 化)

制約条件#からじゃなく、

!から鞍点を探す

2013年11月26日火曜日

Page 7: はじパタ8章 svm

ちょっとカーネルトリックの復習

! 線形分離が上 くできない場合でも、 線形変換で 次元空間に写像すれば上 く分離できる場合がある

!  線形写像 " d次元の学習データx∈Rd

" !(x)=(!0(x)=1, !1(x),…,!M(x))T

!0

線形変換!

識別境界

線形変換!でM次元空間に写像

バイアス項 写像結果

2013年11月26日火曜日

Page 8: はじパタ8章 svm

動径基底カーネル(RBFカーネル)

多項式カーネルとは別にもう1つ内積で表すカーネルがあります。

σ:カーネル関数の広がりを制御するパラメータ

h ! x( )( ) =!0T" x( ) = !iti"

T xi( )! x( )i=1

N

! = !itiK xi, x( )i=1

N

!

σが大きいとき:入力データxから遠く離れている広範囲のサポートベクトルが関与

ココ!

σが小さいとき:入力データxの近傍のサポートベクトルのみが関与

2013年11月26日火曜日

Page 9: はじパタ8章 svm

ちょっとだけ正規分布の話

正規分布といえば、下記の図がぱっと思い浮かびます。

σを大きくした場合、この正規分布の高さが低くなり横に散らばります。σを小さくした場合は、山の凸が急になり、分布の裾野が薄くなります。

2013年11月26日火曜日

Page 10: はじパタ8章 svm

RBFカーネルの特徴

RBFカーネルの非線形特徴ベクトルは無限次元となるようです。

ただの式展開なので、詳細は教科書見てちょ

よく使われるガウシアンカーネルもこのRBFカーネルの一部のようです。以前、同一種だと思っていましたが、完全一致ではないもよう。詳しくはわからないので、誰か知ってたら教えてください。

2013年11月26日火曜日

Page 11: はじパタ8章 svm

Rでの実行例library(MASS)内のPima.trでRBFカーネルの識別具合を実行する例が載っている。WHOがインディアン女性の健康データを取得したものらしい。

> Pima.tr npreg glu bp skin bmi ped age type1 5 86 68 28 30.2 0.364 24 No2 7 195 70 33 25.1 0.163 55 Yes3 5 77 82 41 35.8 0.156 35 No4 0 165 76 43 47.9 0.259 26 No5 0 107 60 25 26.4 0.133 23 No6 5 97 76 27 35.6 0.378 52 Yes7 3 83 58 31 34.3 0.336 25 No8 1 193 50 16 25.9 0.655 24 No9 3 142 80 15 32.4 0.200 63 No10 2 128 78 37 43.3 1.224 31 Yes

このtypeをglu、bmiを用いてkernlabパッケージのksvm関数を用いて、RBFカーネルのσとCのパラメータを調整して、その識別精度を検証。

2013年11月26日火曜日

Page 12: はじパタ8章 svm

Rでの実行例

x1_svm1 <- ksvm(type~glu+bmi,data=x,kernel="rbfdot",kpar=list(sigma=0.2),C=1)

※実行コードがないので、とりあえず加法してみた。※カーネル選択はRBF

※σとCは引数で調節

2013年11月26日火曜日

Page 13: はじパタ8章 svm

Νーサポートベクトルマシーン

ソフトマージン識別機では、誤識別数の上限を抑えるためにCという定数パラメータを使っていました。

( ) ( )( ) !!!===

"+"+"+=N

iii

N

iii

Tii

N

ii

Tp bxtCbL

1111

21,,,,~

#µ#$%#$$µ#%$

しかし、母集団からの標本が変わると誤識別数も変化してしまいます。

学習器の複雑さと達成可能な誤識別率には関連性があるので、そのトレードオフをνというパラメータを介したものがν-SVMです。

※タイトルのはどうしても小文字で表記できなかったので大文字表記です。すみません。。

2013年11月26日火曜日

Page 14: はじパタ8章 svm

何を変えたの?

CクラスSVMの場合の損失関数は

ξi =f +(1- tif (xi))ν-SVMの場合の損失関数は

ξi =f +(ρ- tif (xi))

ρの値を最適化することを考えます。

学習機械は損失を小さくする方にはたらくので、損失関数としてはマージンの大きさを決める値ρが小さければ小さいほど損失は小さくなる。

しかし、小さくなりすぎると汎化性能が下がる。

2013年11月26日火曜日

Page 15: はじパタ8章 svm

主問題

評価関数(最小化)

不等式制約条件

先ほどの汎化性能の問題もあり、次のように定式化します。

2013年11月26日火曜日

Page 16: はじパタ8章 svm

KKT条件

数式書くの心が折れたんで、P129の(8.36)と(1)~(8)を参照ください。

(7),(8)式が相補性条件となるので、(8.36)式に代入することで、次のような双対問題を得る事ができます!

2013年11月26日火曜日

Page 17: はじパタ8章 svm

双対問題

評価関数(最大化)

制約条件

2013年11月26日火曜日

Page 18: はじパタ8章 svm

ニューの意味って何

サポートベクトルはai>0となる学習データサポートベクトルでないデータに対しては、ai=0で、最大値は1/N

×サポートベクトル数サポートベクトル

νはサポートベクトルの割合の下限を与えていることになります。

2013年11月26日火曜日

Page 19: はじパタ8章 svm

ニューの意味って何

また、KKT条件(8)からマージンを超えてξi>0となる場合、μi=0なのでKKT条件(3)から、αi=1/Nとなるので、

νはマージン誤り(上限サポートベクトルの割合の上限)を与えている

=1/N×上限サポートベクトル数+

上限サポートベクトル

上限でないサポートベクトル

上限でないサポートベクトル

※ν≧1/N×上限サポートベクトル数

2013年11月26日火曜日

Page 20: はじパタ8章 svm

Rでの実行例2

どうやらν-SVMは先ほどのksvm関数の引数のnuを指定すればできるようだ

サポートベクトルの割合(上側)

上限サポートベクトルの割合

(下側)

νmax=0.68以上の領域では意味がない。(下限と上限逆転しちゃうから?)

2013年11月26日火曜日

Page 21: はじパタ8章 svm

1クラスサポートベクトルマシン

C-SVMやν-SVMは2クラスの識別関数を構成するものだった。

SVMを1クラスの学習に用いて、入力データがそのクラスに入るか入らないかのみを判断する方法が、One-Class SVM

■主な用途新規性判断、例外検出、外れ値検出など‥

2013年11月26日火曜日

Page 22: はじパタ8章 svm

やり方は2種類あるらしい

1、ν-SVMを用いてマージン境界の超平面を  用いて、正負を判定する方法

2、サポートベクトル領域記述法  正例を超球で包み、その半径を最適化

テキストでは1を紹介!

2013年11月26日火曜日

Page 23: はじパタ8章 svm

1クラスSVMの概念図

!

!w

x Φ(x)

○のデータを非線形変換して学習し、識別境界を挟んで原点と反対側に来るように学習。○が正例、×は負例ということになる。

※すべて正例でも外れ値検出される懸念があるので、注意!

2013年11月26日火曜日

Page 24: はじパタ8章 svm

主問題と双対問題

2013年11月26日火曜日

Page 25: はじパタ8章 svm

識別関数

f(x)=1の時が正例f(x)=-1の時が外れ値となります。

2013年11月26日火曜日

Page 26: はじパタ8章 svm

Rでの実行例3

実はksvm関数の引数設定で、type=”one-svc”と指定するとできるっぽい

実行例では、σ=4、ν=0.01で学習した時の例が出ていますね。

2013年11月26日火曜日

Page 27: はじパタ8章 svm

1クラスSVMをRでやってみる

ちょっと途中で息切れしちゃったのですが、1クラスSVM試してみたので、勘弁してください。

x,y座標に乱数を100個

RBFカーネルを選択

ν=0.01

σ=0.1

赤:正例青:負例

2013年11月26日火曜日

Page 28: はじパタ8章 svm

1クラスSVMをRでやってみる

ちょっと途中で息切れしちゃったのですが、1クラスSVM試してみたので、勘弁してください。

x,y座標に乱数を10000個

RBFカーネルを選択

ν=0.3

σ=0.1

赤:正例青:負例

2013年11月26日火曜日

Page 29: はじパタ8章 svm

なんかちゃんとできてるっぽい!

2013年11月26日火曜日

Page 30: はじパタ8章 svm

コードも載せとくね

x <- rnorm(100)y <- rnorm(100)data <- data.frame(type=1, x, y)

library(kernlab)data.ksvm<- ksvm(type~.,data=data,type="one-svc",kernel="rbfdot",kpar=list(sigma=0.1),nu=0.01,cross=10)

data.ksvm.predict <- predict(data.ksvm)data.ksvm.predict <- ifelse(data.ksvm.predict==TRUE, 1, 2)

data.result <- cbind(data,data.ksvm.predict)plot(data.result[,2:3], pch=21, bg=c("red","blue")[data.result$data.ksvm.predict])

1万はちょっと時間かかったから、前者の例です

2013年11月26日火曜日

Page 31: はじパタ8章 svm

あ、そういえば!

2013年11月26日火曜日

Page 32: はじパタ8章 svm

Japan.Rでトークします

マサカリ投げないでくだしあ2013年11月26日火曜日

Page 33: はじパタ8章 svm

おわり

ご清聴ありがとうございました!

2013年11月26日火曜日