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

8,671 views

Published on

Published in: Education
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,671
On SlideShare
0
From Embeds
0
Number of Embeds
39
Actions
Shares
0
Downloads
39
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

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

  1. 1. 学習ベクトルの量子化 東京大学 三好雄也1
  2. 2. はじめにかなり参考にさせて頂きました http://www.slideshare.net/sleipnir002/08-09-k-lvq 問題があれば削除します 2
  3. 3. 量子化とは 量子化(Quantization)  ある連続量を、データ量削減のために、最も近い不連続値(代表ベクト ル、セントロイド)に置き換える(近似、情報圧縮)すること。(精度は落 ちます。)  画像圧縮に用いられたりするようです。 3
  4. 4. 学習ベクトルの量子化のイメージ 1 入力データを代表ベクトルによって分割近似するという点で はk-meansと目的を同じくする。 入力データに近い代表ベクトルによって判別を行う点ではk- 近傍法と関連がある。 何はともあれ、代表ベクトルをいかに配置するかが鍵 代表ベクトルによる 入力データとラベル 入力空間の分割 4
  5. 5. 学習ベクトルの量子化のイメージ 2 入力データに近い代表ベクトルによって判別を行う点ではk- 近傍法と関連がある。 代表ベクトルによる 入力データとラベル 入力空間の分割 5
  6. 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. 7. 学習アルゴリズム 学習アルゴリズムとしては以下のものがある1. LVQ12. LVQ2.13. LVQ34. OLVQ1(Optimized-learning rate LVQ1) 7
  8. 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. 9. LVQ1 -2 y(t)= 𝑙 𝑐 (t) → 𝑚 𝑖 (t)をx(t)に近づける y(t)≠ 𝑙 𝑐 (t) → 𝑚 𝑖 (t)をx(t)から遠ざける 9
  10. 10. LVQ2.1 -1 LVQ1は1つの代表ベクトルしか更新しなかったが、2つの代表 ベクトルに対して更新を行うアルゴリズムがLVQ2.1更新の対象 ラベルが違うがテスト点から最も近い代表ベクトル 𝑚 𝑖 (t) ラベルが同じでテスト点から最も近い代表ベクトル 𝑚 𝑗 (t) 10
  11. 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. 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. 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. 14. OLVQ1 -2mi (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. 15. 問題点1. 初期値依存2. 学習データによる学習の順番にも結果が依存する 15
  16. 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. 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)

×