Contenu connexe Similaire à パターン認識 第12章 正則化とパス追跡アルゴリズム (20) パターン認識 第12章 正則化とパス追跡アルゴリズム3. SVMの確認
識別問題 y = sgn(𝑤𝑥 + 𝑏 )
𝑤𝑥 + 𝑏 =0
sgn(y) = 1 … y ≧0
sgn(y) =-1 … y < 0
𝑤𝑥 𝑖 + 𝑏 =0 は定数倍しても問題ないので
⇒ 𝑤𝑥 𝑖 + 𝑏 ≧1 … 𝑦 𝑖 = 1
𝑤𝑥 𝑖 + 𝑏 ≦ -1 … 𝑦𝑖 = 1
⇒ 𝑦 𝑖 (𝑤𝑥 𝑖 + 𝑏 )≧1 ←このもとでマージン最大化
3
4. ソフトマージン(C-SVM)の復習 1
線形分離可能ではない場合、以下の式を満たす (w , b) は存
在しない
𝑦 𝑖 (𝑤𝑥 𝑖 + 𝑏 ) ≧ 1
そこで、
𝑦 𝑖 (𝑤𝑥 𝑖 + 𝑏 ) < 1
となる場合もペナルティ付きで認
めるというのがソフトマージン
線形分離不可能
4
5. ソフトマージン(C-SVM)の復習 2
𝑤𝑥 + 𝑏 =0
セ、セーフ?
はずれ幅 ξ 𝑖 = max{1- 𝑦 𝑖 (𝑤𝑥 𝑖 + 𝑏) ,0}
ペナルティの大きさC → ペナルティ Cξ 𝑖
5
6. ソフトマージン(C-SVM)の復習 3
ペナルティ Cξ 𝑖 =C×max{1- 𝑦 𝑖 (𝑤𝑥 𝑖 + 𝑏) ,0}
B ξ𝑖 = 0 分離成功
0 < ξ𝑖 ≦ 1 Aの場合
A ξ𝑖 > 1 Bの場合(分離失敗)
A
C → ∞ でハードマージンと同じ
B
6
7. ソフトマージン(C-SVM)の復習 4
ペナルティ Cξ 𝑖 =C×max{1- 𝑦 𝑖 (𝑤𝑥 𝑖 + 𝑏) ,0}
目的関数の再定義
1 2 𝑛
min 𝑤 +C 𝑖=1 ξ 𝑖
𝑤,𝑏 2
s.t. ξ𝑖 ≧ 0 …(2)
ξ 𝑖 ≧ 1- 𝑦 𝑖 (𝑤𝑥 𝑖 + 𝑏)
つまりはoverfitしないように、Cでパラメータに制約を加えている
感じ・・・なハズです。この仕組みが正則化!
7
9. SVMのパラメータ推定 1
数式的な部分は省略します。
結局のところ、ラグランジュ乗数法で最適化問題を解くことに
より、以下の式と制約条件が導かれます。
双対問題
1 2+ C 𝑛
L = 𝑤 𝑖=1 ξ 𝑖
2
𝑛 𝑛
- 𝑖=1 𝜆𝑖 ξ𝑖 - 𝑖=1 𝛼 𝑖 (ξ 𝑖 − 1- 𝑦 𝑖 (𝑤𝑥 𝑖 + 𝑏 ))
𝑛 1
⇔ L= 𝑖=1 𝛼𝑖 - 𝑖,𝑗 𝛼 𝑖 𝛼𝑗 𝑦 𝑖 𝑦𝑗 𝑥 𝑖 𝑥𝑗 …(3)
2
𝜆 𝑖 について ただし 𝜆 𝑖 ≧0 , 𝛼 𝑖 ≧0
最大化
𝜆 , 𝛼 はラグランジュ乗数
9
10. SVMのパラメータ推定 2
ラグランジュ乗数法の中で以下の式が現れる。
𝑛
w= 𝑖=1 𝛼 𝑖 𝑦𝑖 𝑥𝑖
𝑛
𝑖=1 𝛼 𝑖 𝑦 𝑖 =0
𝜆 𝑖 + 𝛼 𝑖 =C
(3)式を最大化し、最適な 𝜆 を求め、以下のようにパラメータ
w* , b* を求める。
𝑛
w* = 𝑖=1 𝛼 𝑖 𝑦𝑖 𝑥𝑖
𝑛
b* = 𝑖=1 𝛼 𝑖 𝑦𝑖 𝑥𝑖
10
11. SVMのパラメータ推定 3
まとめると、ソフトマージンSVMの場合、以下の制約条件が課
されるものの基本的にはハードマージンSVMと変わりはない
𝑛
𝑖=1 𝛼 𝑖 𝑦 𝑖 =0 , 0≦ 𝛼 𝑖 ≦C
繰り返しとなるが、ソフトマージンSVMは
ξ𝑖 = 0 or C→∞
で、ハードマージンSVMと等しくなる
11
12. 補足 1 Φ?
Φ(𝑥 𝑖 )の Φ ←こいつのことです。
教科書p120にも書いてありますが、写像を意味します。
今までは比較的線形で分離しやすい例を用いていたため、 Φは用いてい
ませんでした。
しかし、以下のような場合、線形で分離するのはまず無理です。
そこで、何らかの変換(写像)を行い、
分離しやすい形に直してしまおうとい
うのがカーネルの発想です。
変換前:入力空間
変換後:特徴空間
12
13. 補足 2 Φ?
変換によるイメージ
次元を増やす変換だと(これがカーネル!)
13 フリーソフトによるデータ解析・マイニング Rとカーネル法・サポートベクターマシンより
14. パス追跡とは
Cの値が変わると、判別境界が大きく変わる(図12.1)
Cの決め方の手順
→ Cの候補を設定 → 交差検証法、ブートストラップ
しかし、k-交差検証法の場合、計算コストが高くなる
→ パス追跡アルゴリズムにより、いちいち最適問題を
解かずに最適な C の値を追いかける!
ただし、機械学習系ではまだ注目を集め始めた段階であり、
結果も安定しないことから、まだまだ検証が必要な手法?
14
15. パス追跡アルゴリズム 1
初期化 C = 𝐶 𝑚𝑖𝑛
繰り返し C = 𝐶 𝑚𝑎𝑥 となるまで以下のStepを繰り返す
出力 C ∈[𝐶 𝑚𝑖𝑛 , 𝐶 𝑚𝑎𝑥 ] と 𝑓𝑐
パス追跡 グリッドサーチ
𝜆𝑖 𝜆𝑖
変化点を求める 1つずつ最適化
C C
15
16. パス追跡アルゴリズム 2
Step1:直線の方程式を求める
Step2:直線の変化点(break point)を見つける
学習データを3つに分ける
C変化で
境界も変化 1. L = { i | 𝑦 𝑖 𝑓𝑐 <1}
2. R = { i | 𝑦 𝑖 𝑓𝑐 >1}
3. Ε ⇒ 0≦ 𝛼 𝑖 (C) ≦C
それぞれの点の状態が違う状態に移る
Cが増えると Cが “break point”
幅が小さくなる
16
17. パス追跡アルゴリズム 3
イメージ的には csvm.svg を参照
http://sora-blue.net/~shogo82148/memo/algorithm/svm/csvm.html
それぞれの点の状態が変化していることが確認できる
17
18. パス追跡アルゴリズム in R 1
α の推定値
fit <- svmpath(x, y, kernel.function=radial.kernel, param.kernel=sigma)
x …200×2 の2次元 y …200個のラベル(-1,1)
Svmpath
⇒ fit $ lambda : the value of the regularization parameter …C , 0~45の500弱個
⇒ fit $ alpha : αの値 …200×500弱
計算の高速化
system.time(fit <- svmpath(x,y,kernel.function=radial.kernel,param.kernel=sigma))
system.time(for (i in 1:length(C.list))
ksvm(x,y,kernel="rbfdot",kpar=list(sigma=sigma),C=C.list[i]))
僕のPCだと
Cの数…414個 svmpath → 0.11秒 ksvm → 30.01秒でした
18
19. パス追跡アルゴリズム in R 2
dat$x
最後のコード(path-svm.r)でも何らか
の方法で、カーネル法を用います。
ただ、このカーネルにガウシアンカー
ネルを用いる場合、 “σ” の値をどうす
るかという問題も生じます。
そこで、最後のコードではCを100段階
に変化させるとともに “σ” の値も10段
階で変化させています。
〇:1 〇:2
19
20. パス追跡アルゴリズム in R 3
sigma.list <- 1/quantile(dist(x),prob=seq(0.01,0.5,l=20))^2
for (sigma in sigma.list){
print(sigma)
err <- c()
for (j in 1:kcv){
C-SVM
## k-交差検証法
tmpx <- x[idx!=j,]
tmpy <- y[idx!=j]
fit <- svmpath(tmpx, tmpy,
+ kernel.function=radial.kernel, param.kernel=sigma)
pred <- predict(fit,x[idx==j,],1/C.list,type="class")
err <- rbind(err, colMeans(pred != y[idx==j]))
}
cverr <- rbind(cverr,colMeans(err))
}
20
21. まとめ
SVMにおけるパス追跡アルゴリズムとは、交差検証法の計算
量を軽減することを目的としたものであり、近年、その有効性
が認識されつつある。
ただし、最適化問題としては既に確立しているものの、機械
学習においては統計的性質など研究課題は多い。
また、値も安定しない。
なお、パターン認識の本では線形までしか示されていない
21