はじめてのパターン認識第8章
「サポートベクトルマシーン」後半
2013/11/26 @リクルート
2013年11月26日火曜日
あんた誰?
名前 伊藤 徹郎 (@tetsuroito)
所属株式会社ALBERT データ分析部好きなものサッカー、スキー、オレオ!
2013年11月26日火曜日
アジェンダ
1、動径基底カーネル(RBFカーネル)
2、ν-サポートベクトルマシーン
3、1クラスサポートベクトルマシーン
2013年11月26日火曜日
ちょっとSVMの復習
SVMは下記のように、分類したい識別境界を求めるのでしたね。
! 識別境界:!Tx + b = 0" !:識別境界の係数ベクトル(学習データから求める)
" x:学習データ(d次元の特徴変数!データ数N→d!Nの 列)
" b:バイアス項(学習データから求める)
!
線形識別関数 !Tx + b = 0
t = +1
t = -1
2013年11月26日火曜日
ちょっとSVMの復習
制約条件付きの凸計画問題を解く場合、ラグランジュの未定乗数法を用いるSVMの場合は制約条件が不等式となる
主問題評価関数(最小化):Lp(ω) = ½・ωTω ←マージンの最小化不等式制約条件:ti(ωTxi+b) ≧ 1 ←判別
ラグランジュ関数(これで制約付き凸計画を解く)
αiはラグランジュ未定定数α=(α1,・・・, αN)
( ) ( )( )!=
"+"=N
ii
Tii
Tp bxtbL
11
21,,~
#$##$#
2013年11月26日火曜日
ちょっと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日火曜日
ちょっとカーネルトリックの復習
! 線形分離が上 くできない場合でも、 線形変換で 次元空間に写像すれば上 く分離できる場合がある
! 線形写像 " d次元の学習データx∈Rd
" !(x)=(!0(x)=1, !1(x),…,!M(x))T
!0
線形変換!
識別境界
線形変換!でM次元空間に写像
バイアス項 写像結果
2013年11月26日火曜日
動径基底カーネル(RBFカーネル)
多項式カーネルとは別にもう1つ内積で表すカーネルがあります。
σ:カーネル関数の広がりを制御するパラメータ
h ! x( )( ) =!0T" x( ) = !iti"
T xi( )! x( )i=1
N
! = !itiK xi, x( )i=1
N
!
σが大きいとき:入力データxから遠く離れている広範囲のサポートベクトルが関与
ココ!
σが小さいとき:入力データxの近傍のサポートベクトルのみが関与
2013年11月26日火曜日
ちょっとだけ正規分布の話
正規分布といえば、下記の図がぱっと思い浮かびます。
σを大きくした場合、この正規分布の高さが低くなり横に散らばります。σを小さくした場合は、山の凸が急になり、分布の裾野が薄くなります。
2013年11月26日火曜日
RBFカーネルの特徴
RBFカーネルの非線形特徴ベクトルは無限次元となるようです。
ただの式展開なので、詳細は教科書見てちょ
よく使われるガウシアンカーネルもこのRBFカーネルの一部のようです。以前、同一種だと思っていましたが、完全一致ではないもよう。詳しくはわからないので、誰か知ってたら教えてください。
2013年11月26日火曜日
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日火曜日
Rでの実行例
x1_svm1 <- ksvm(type~glu+bmi,data=x,kernel="rbfdot",kpar=list(sigma=0.2),C=1)
※実行コードがないので、とりあえず加法してみた。※カーネル選択はRBF
※σとCは引数で調節
2013年11月26日火曜日
Νーサポートベクトルマシーン
ソフトマージン識別機では、誤識別数の上限を抑えるためにCという定数パラメータを使っていました。
( ) ( )( ) !!!===
"+"+"+=N
iii
N
iii
Tii
N
ii
Tp bxtCbL
1111
21,,,,~
#µ#$%#$$µ#%$
しかし、母集団からの標本が変わると誤識別数も変化してしまいます。
学習器の複雑さと達成可能な誤識別率には関連性があるので、そのトレードオフをνというパラメータを介したものがν-SVMです。
※タイトルのはどうしても小文字で表記できなかったので大文字表記です。すみません。。
2013年11月26日火曜日
何を変えたの?
CクラスSVMの場合の損失関数は
ξi =f +(1- tif (xi))ν-SVMの場合の損失関数は
ξi =f +(ρ- tif (xi))
ρの値を最適化することを考えます。
学習機械は損失を小さくする方にはたらくので、損失関数としてはマージンの大きさを決める値ρが小さければ小さいほど損失は小さくなる。
しかし、小さくなりすぎると汎化性能が下がる。
2013年11月26日火曜日
主問題
評価関数(最小化)
不等式制約条件
先ほどの汎化性能の問題もあり、次のように定式化します。
2013年11月26日火曜日
KKT条件
数式書くの心が折れたんで、P129の(8.36)と(1)~(8)を参照ください。
(7),(8)式が相補性条件となるので、(8.36)式に代入することで、次のような双対問題を得る事ができます!
2013年11月26日火曜日
双対問題
評価関数(最大化)
制約条件
2013年11月26日火曜日
ニューの意味って何
サポートベクトルはai>0となる学習データサポートベクトルでないデータに対しては、ai=0で、最大値は1/N
×サポートベクトル数サポートベクトル
νはサポートベクトルの割合の下限を与えていることになります。
2013年11月26日火曜日
ニューの意味って何
また、KKT条件(8)からマージンを超えてξi>0となる場合、μi=0なのでKKT条件(3)から、αi=1/Nとなるので、
νはマージン誤り(上限サポートベクトルの割合の上限)を与えている
=1/N×上限サポートベクトル数+
上限サポートベクトル
上限でないサポートベクトル
上限でないサポートベクトル
※ν≧1/N×上限サポートベクトル数
2013年11月26日火曜日
Rでの実行例2
どうやらν-SVMは先ほどのksvm関数の引数のnuを指定すればできるようだ
サポートベクトルの割合(上側)
上限サポートベクトルの割合
(下側)
νmax=0.68以上の領域では意味がない。(下限と上限逆転しちゃうから?)
2013年11月26日火曜日
1クラスサポートベクトルマシン
C-SVMやν-SVMは2クラスの識別関数を構成するものだった。
SVMを1クラスの学習に用いて、入力データがそのクラスに入るか入らないかのみを判断する方法が、One-Class SVM
■主な用途新規性判断、例外検出、外れ値検出など‥
2013年11月26日火曜日
やり方は2種類あるらしい
1、ν-SVMを用いてマージン境界の超平面を 用いて、正負を判定する方法
2、サポートベクトル領域記述法 正例を超球で包み、その半径を最適化
テキストでは1を紹介!
2013年11月26日火曜日
1クラスSVMの概念図
!
!w
x Φ(x)
○のデータを非線形変換して学習し、識別境界を挟んで原点と反対側に来るように学習。○が正例、×は負例ということになる。
※すべて正例でも外れ値検出される懸念があるので、注意!
2013年11月26日火曜日
主問題と双対問題
2013年11月26日火曜日
識別関数
f(x)=1の時が正例f(x)=-1の時が外れ値となります。
2013年11月26日火曜日
Rでの実行例3
実はksvm関数の引数設定で、type=”one-svc”と指定するとできるっぽい
実行例では、σ=4、ν=0.01で学習した時の例が出ていますね。
2013年11月26日火曜日
1クラスSVMをRでやってみる
ちょっと途中で息切れしちゃったのですが、1クラスSVM試してみたので、勘弁してください。
x,y座標に乱数を100個
RBFカーネルを選択
ν=0.01
σ=0.1
赤:正例青:負例
2013年11月26日火曜日
1クラスSVMをRでやってみる
ちょっと途中で息切れしちゃったのですが、1クラスSVM試してみたので、勘弁してください。
x,y座標に乱数を10000個
RBFカーネルを選択
ν=0.3
σ=0.1
赤:正例青:負例
2013年11月26日火曜日
なんかちゃんとできてるっぽい!
2013年11月26日火曜日
コードも載せとくね
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日火曜日
あ、そういえば!
2013年11月26日火曜日
Japan.Rでトークします
マサカリ投げないでくだしあ2013年11月26日火曜日
おわり
ご清聴ありがとうございました!
2013年11月26日火曜日