パターン認識第9章 学習ベクトル量子化

17
学習ベクトルの量子化 東京大学 三好雄也 1

Upload: miyoshi-yuya

Post on 25-May-2015

4.578 views

Category:

Education


2 download

TRANSCRIPT

Page 1: パターン認識第9章 学習ベクトル量子化

学習ベクトルの量子化

東京大学 三好雄也

1

Page 2: パターン認識第9章 学習ベクトル量子化

はじめに

かなり参考にさせて頂きました http://www.slideshare.net/sleipnir002/08-09-k-lvq

問題があれば削除します

2

Page 3: パターン認識第9章 学習ベクトル量子化

量子化とは

量子化(Quantization)

ある連続量を、データ量削減のために、最も近い不連続値(代表ベクトル、セントロイド)に置き換える(近似、情報圧縮)すること。(精度は落ちます。)

画像圧縮に用いられたりするようです。

3

Page 4: パターン認識第9章 学習ベクトル量子化

学習ベクトルの量子化のイメージ 1

入力データを代表ベクトルによって分割近似するという点ではk-meansと目的を同じくする。

入力データに近い代表ベクトルによって判別を行う点ではk-近傍法と関連がある。

何はともあれ、代表ベクトルをいかに配置するかが鍵

入力データとラベル 代表ベクトルによる

入力空間の分割

4

Page 5: パターン認識第9章 学習ベクトル量子化

学習ベクトルの量子化のイメージ 2

入力データに近い代表ベクトルによって判別を行う点ではk-

近傍法と関連がある。

入力データとラベル

代表ベクトルによる

入力空間の分割

5

Page 6: パターン認識第9章 学習ベクトル量子化

学習ベクトルの量子化の学習プロセス

代表データの初期値の決定プロセス

1. 学習データをk-近傍法によって判別

2. 判別の誤りのないデータからランダムで選ぶ

学習プロセス

1. 時刻tにおいて1つのデータ(テスト点)を選択

2. 代表ベクトルの更新

時刻tで選ばれたデータ (x(t),y(t)) x:特徴量、y:ラベル

時刻tにおける代表データ 𝑚1(t) 代表データのラベル 𝑙𝑖(t), i=1,2,…k

6

Page 7: パターン認識第9章 学習ベクトル量子化

学習アルゴリズム

学習アルゴリズムとしては以下のものがある

1. LVQ1

2. LVQ2.1

3. LVQ3

4. OLVQ1(Optimized-learning rate LVQ1)

7

Page 8: パターン認識第9章 学習ベクトル量子化

LVQ1 -1

テスト点(x(t),y(t))が入力される

テスト点から最も近い代表ベクトルを c とする

c = 𝑎𝑟𝑔𝑚𝑖𝑛𝑖 𝑥 − 𝑚𝑖

このとき

y(t)= 𝑙𝑐(t) → 𝑚𝑐(t+1) = 𝑚𝑐(t) + α(t)(x(t)- 𝑚𝑐(t))

y(t)≠ 𝑙𝑐(t) → 𝑚𝑐(t+1) = 𝑚𝑐(t)-α(t)(x(t)- 𝑚𝑐(t))

ただし、 0 < α(t) < 1

i ≠ c → 𝑚𝑖(t+1) = 𝑚𝑖(t)

8

Page 9: パターン認識第9章 学習ベクトル量子化

LVQ1 -2

y(t)= 𝑙𝑐(t) → 𝑚𝑖(t)をx(t)に近づける

y(t)≠ 𝑙𝑐(t) → 𝑚𝑖(t)をx(t)から遠ざける

9

Page 10: パターン認識第9章 学習ベクトル量子化

LVQ2.1 -1

LVQ1は1つの代表ベクトルしか更新しなかったが、2つの代表ベクトルに対して更新を行うアルゴリズムがLVQ2.1

更新の対象

ラベルが違うがテスト点から最も近い代表ベクトル 𝑚𝑖(t)

ラベルが同じでテスト点から最も近い代表ベクトル 𝑚𝑗(t)

10

Page 11: パターン認識第9章 学習ベクトル量子化

LVQ2.1 -2

𝑑𝑖 𝑑𝑗

𝑚𝑗 𝑚𝑖

s = 1−𝑤

1+𝑤 とし、min(

𝑑𝑖

𝑑𝑗 ,

𝑑𝑗

𝑑𝑖 ) > s なら、以下の更新を行う

𝑚𝑖(t+1) = 𝑚𝑖(t)-α(t)(x(t)- 𝑚𝑖(t)) → 遠ざける

𝑚𝑗(t+1) = 𝑚𝑗(t) + α(t)(x(t)- 𝑚𝑗(t)) → 近づける

左図の場合、𝑑𝑗

𝑑𝑖 > s =

1−𝑤

1+𝑤 となる

min( 𝑑𝑖

𝑑𝑗 ,

𝑑𝑗

𝑑𝑖 )≦1であり、 𝑑𝑗と𝑑𝑗が近

いほど、更新が行われやすくなる。

11

Page 12: パターン認識第9章 学習ベクトル量子化

LVQ3

LVQ1とLVQ2.1を融合したようなもの

テスト点から近い2つ代表ベクトルを順に𝑚𝑖(t), 𝑚𝑗(t)とし、以

下のどちらかの条件を満たした場合に更新を行う。

1. li(t) , lj(t)がともにy(t)と同じ

𝑚ℎ(t+1)= 𝑚ℎ(t)+εα(t)(x(t)-𝑚ℎ(t)) ,h=i,j →近づける

2. li(t)≠y(t), lj(t)=y(t)、かつLVQ2.1と同じ条件(テスト点が窓

に入る)の場合

𝑚𝑖(t+1) = 𝑚𝑖(t)-α(t)(x(t)- 𝑚𝑖(t)) → 遠ざける

𝑚𝑗(t+1) = 𝑚𝑗(t) + α(t)(x(t)- 𝑚𝑗(t)) → 近づける

12

Page 13: パターン認識第9章 学習ベクトル量子化

OLVQ1 -1

LVQ1における α(t) の最適化 → 学習の収束特性の改善

y(t)とli(t)との関係を示す変数を導入する

y(t)= 𝑙𝑐(t) → 𝑚𝑐(t+1) = 𝑚𝑐(t) + α(t)(x(t)- 𝑚𝑐(t))

y(t)≠ 𝑙𝑐(t) → 𝑚𝑐(t+1) = 𝑚𝑐(t)-α(t)(x(t)- 𝑚𝑐(t))

i ≠ c → 𝑚𝑖(t+1) = 𝑚𝑖(t)

⇔ mi(t+1) = mi(t) + 𝑠i(t)αi(t)(x(t)- 𝑚𝑖(t))

+1, i=c かつ y(t) = li(t) 𝑠i(t) = -1, i=c かつ y(t) ≠ li(t) 0, i ≠ c

13

Page 14: パターン認識第9章 学習ベクトル量子化

OLVQ1 -2

mi(t+1) = mi(t) + 𝑠i(t)αi(t)(x(t)- 𝑚𝑖(t))

= (1-𝑠i(t)αi(t)) 𝑚𝑖(t) + 𝑠i(t)αi(t)x(t)

さらに展開していくと、

mi(t+1) = (1-𝑠i(t)αi(t))(1-𝑠𝑖(t-1)αi(t-1))𝑚𝑖(t)

+ (1-𝑠i(t)αi(t))𝑠𝑖(t-1)αi(t-1)x(t-1)

+ 𝑠i(t)αi(t) x(t)

𝑠i(t)𝑠i(t-1)=0のとき、 x(t-1) と x(t) の係数の絶対値が等しいとし、さらに、 𝑠i =1, 0< α <1 を考慮すると、最終的に

αi(𝑡) = αi(𝑡−1)

1+si(𝑡)αi(𝑡−1)

14

Page 15: パターン認識第9章 学習ベクトル量子化

問題点

1. 初期値依存

2. 学習データによる学習の順番にも結果が依存する

15

Page 16: パターン認識第9章 学習ベクトル量子化

学習ベクトル -入力データ in R library(class) ; library(mlbench)

dim <- 2 # 入力空間の次元 ; n <- 300 # 学習データ数

smpl <- mlbench.corners(n, d=dim, sd=0.25)

x <- smpl$x ; y <- smpl$classes

size <- 8 # 代表ベクトルの数 ; k <- 1 # 初期化

cd <- lvqinit(x,y, size=size, k=k) ; cd3 <- lvq3(x,y,cd)

# 学習前後の判別境界

gsize <- 100 # グリッドのサイズ

x1 <- seq(min(x[,1]), max(x[,1]), length=gsize)

x2 <- seq(min(x[,2]), max(x[,2]), length=gsize)

xtest <- as.matrix(expand.grid(x1,x2))

yest <- lvqtest(cd, xtest)

yest3 <- lvqtest(cd3, xtest)

cntr <- matrix(match(yest, levels(factor(yest))), gsize, gsize)

cntr3 <- matrix(match(yest3, levels(factor(yest3))), gsize, gsize)

plot(x, col=y, pch=20+as.numeric(y), xlab="x1", ylab="x2",

main="Initial Codebook")

# 代表ベクトル

points(cd3$x, col=cd3$cl, bg=cd$cl,

pch=20+as.numeric(cd$cl),cex=2) 16

Page 17: パターン認識第9章 学習ベクトル量子化

学習ベクトル -学習前と学習後

# 学習前の境界を表示

for(i in 1:max(cntr)) contour(x1, x2, cntr==i,

levels=0.5, lwd=2, lty=1, drawlabels=F, add=TRUE)

# 学習後

plot(x, col=y, pch=20+as.numeric(y), xlab="x1",

ylab="x2", main="LVQ3")

points(cd3$x, col=cd3$cl, bg=cd$cl,

pch=20+as.numeric(cd$cl),cex=2)

for(i in

1:max(cntr3))contour(x1,x2,cntr==i,levels=0.5,l

wd=2,lty=1, drawlabels=F, add=TRUE) 17