Weitere ähnliche Inhalte
Ähnlich wie パターン認識第9章 学習ベクトル量子化 (20)
パターン認識第9章 学習ベクトル量子化
- 3. 量子化とは
量子化(Quantization)
ある連続量を、データ量削減のために、最も近い不連続値(代表ベクト
ル、セントロイド)に置き換える(近似、情報圧縮)すること。(精度は落
ちます。)
画像圧縮に用いられたりするようです。
3
- 4. 学習ベクトルの量子化のイメージ 1
入力データを代表ベクトルによって分割近似するという点で
はk-meansと目的を同じくする。
入力データに近い代表ベクトルによって判別を行う点ではk-
近傍法と関連がある。
何はともあれ、代表ベクトルをいかに配置するかが鍵
代表ベクトルによる
入力データとラベル
入力空間の分割
4
- 6. 学習ベクトルの量子化の学習プロセス
代表データの初期値の決定プロセス
1. 学習データをk-近傍法によって判別
2. 判別の誤りのないデータからランダムで選ぶ
学習プロセス
1. 時刻tにおいて1つのデータ(テスト点)を選択
2. 代表ベクトルの更新
時刻tで選ばれたデータ (x(t),y(t))
x:特徴量、y:ラベル
時刻tにおける代表データ 𝑚1 (t)
代表データのラベル 𝑙 𝑖 (t), i=1,2,…k
6
- 7. 学習アルゴリズム
学習アルゴリズムとしては以下のものがある
1. LVQ1
2. LVQ2.1
3. LVQ3
4. OLVQ1(Optimized-learning rate LVQ1)
7
- 8. 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
- 9. LVQ1 -2
y(t)= 𝑙 𝑐 (t) → 𝑚 𝑖 (t)をx(t)に近づける
y(t)≠ 𝑙 𝑐 (t) → 𝑚 𝑖 (t)をx(t)から遠ざける
9
- 10. LVQ2.1 -1
LVQ1は1つの代表ベクトルしか更新しなかったが、2つの代表
ベクトルに対して更新を行うアルゴリズムがLVQ2.1
更新の対象
ラベルが違うがテスト点から最も近い代表ベクトル 𝑚 𝑖 (t)
ラベルが同じでテスト点から最も近い代表ベクトル 𝑚 𝑗 (t)
10
- 11. LVQ2.1 -2
1−𝑤 𝑑𝑖 𝑑 𝑗
s = とし、min( , ) > s なら、以下の更新を行う
1+𝑤 𝑑 𝑗 𝑑𝑖
𝑚 𝑖 (t+1) = 𝑚 𝑖 (t)-α(t)(x(t)- 𝑚 𝑖 (t)) → 遠ざける
𝑚 𝑗 (t+1) = 𝑚 𝑗 (t) + α(t)(x(t)- 𝑚 𝑗 (t)) → 近づける
𝑑𝑗 1−𝑤
左図の場合、 >s= となる
𝑑𝑗 𝑑𝑖 1+𝑤
𝑑𝑖
𝑑𝑖 𝑑𝑗
𝑚𝑗 𝑚𝑖 min( , )≦1であり、 𝑑 𝑗 と𝑑 𝑗 が近
𝑑𝑗 𝑑𝑖
いほど、更新が行われやすくなる。
11
- 12. 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
- 13. OLVQ1 -1
LVQ1における α(t) の最適化 → 学習の収束特性の改善
y(t)とli (t)との関係を示す変数を導入する
+1, i=c かつ y(t) = li (t)
𝑠i (t) = -1, i=c かつ y(t) ≠ li (t)
0, i ≠ c
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))
13
- 14. 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(𝑡−1)
αi (𝑡) =
1+si (𝑡)αi (𝑡−1)
14
- 15. 問題点
1. 初期値依存
2. 学習データによる学習の順番にも結果が依存する
15
- 16. 学習ベクトル -入力データ 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
- 17. 学習ベクトル -学習前と学習後
# 学習前の境界を表示 # 学習後
for(i in 1:max(cntr)) contour(x1, x2, cntr==i, plot(x, col=y, pch=20+as.numeric(y), xlab="x1",
levels=0.5, lwd=2, lty=1, drawlabels=F, add=TRUE) 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
17 wd=2,lty=1, drawlabels=F, add=TRUE)