Önyükleme filtresi / Parçacık filtresi algoritması (Anlama)


12

Bootstrap filtresinin nasıl çalıştığını gerçekten anlamıyorum. Kabaca kavramları biliyorum ama bazı detayları kavrayamıyorum. Bu soru benim için dağınıklığı gidermem. Burada doucet tarafından yapılan bir referanstan bu popüler filtre algoritmasını kullanacağım (şimdiye kadar bunun en kolay referans olduğunu düşünüyorum). Öncelikle size sorunumun hangi dağılımların bilindiğini ve hangilerinin bilinmediğini anlamak olduğunu söyleyeyim.

önyükleme filtresi

Bunlar benim sorularım:

  1. 2) 'de dağılımı nedir? Bu dağılım biliniyor mu? Bu dağılımı tüm için biliyor muyuz ? Eğer öyleyse, ya ondan örnek alamazsak? Bu önemi örnekleme adımı olarak adlandırdıkları çok komik ama teklif dağıtımı görmüyorum.p(xt|xt1(i))t
  2. Ayrıca 2 inç) bir bilinen dağıtım? "Önem Ağırlığını Normalleştirin, ? neyi üzerindeki tilde ve ortalama? o mu gibi ortalama bir şey un-resampled veya sırasıyla un-normalize?p(yt|x~t(i))wt(i)=w~t(i)i=1Nw~t(i)xw
  3. Herkes bu bootstrap filtreyi kullanmak için iyi bilinen dağıtımları kullanarak basit bir oyuncak örneği verebilir eğer takdir ediyorum. Önyükleme filtresinin son hedefi benim için net değil.

Yanıtlar:


10
  1. Bu, modelinizin bir parçası olan ve bu nedenle bilinen durumun ( ) geçiş yoğunluğudur . Temel algoritmada örneklemeniz gerekir, ancak tahminler mümkündür. olan , bu durumda teklifi dağılımı. Bu dağıtım için kullanılır genelde uysal değildir.xtp(xt|xt1) p(xt|x0:t1,y1:t)

  2. Evet, bu da modelin bir parçası olan ve bu nedenle bilinen gözlem yoğunluğu. Evet, normalleşmenin anlamı budur. Tilde "ön" gibi bir şey belirtmek için kullanılır: ise yeniden örnekleme önce ve olduğu renormalize önce. Gösterimin, bir yeniden örnekleme adımı olmayan algoritmanın varyantları arasında eşleşmesi için bu şekilde yapıldığını tahmin ediyorum (yani her zaman nihai tahmindir).x~xw~wx

  3. Önyükleme filtrenin nihai amacı koşullu dağılımlar dizisini tahmin etmektir (en gözlenemeyen halde kadar tüm gözlemler verilen, ).p(xt|y1:t)tt

Basit modeli düşünün:

Xt=Xt1+ηt,ηtN(0,1)
X0N(0,1)
Yt=Xt+εt,εtN(0,1)

Bu, gürültü ile gözlemlenen rastgele bir yürüyüştür ( değil, sadece gözlemlersiniz ). Sen hesaplayabilir Kalman filtresi ile tam olarak, ama biz isteğiniz üzerine önyükleme filtresi kullanacağız. Modeli, partikül filtresi için daha yararlı olan durum geçiş dağılımı, ilk durum dağılımı ve gözlem dağılımı (bu sırayla) açısından yeniden ifade edebiliriz:YXp(Xt|Y1,...,Yt)

Xt|Xt1N(Xt1,1)
X0N(0,1)
Yt|XtN(Xt,1)

Algoritmayı uygulama:

  1. Başlatma. Biz oluşturmak göre (bağımsız) parçacıkları .NX0(i)N(0,1)

  2. Her bir parçacığı üreterek bağımsız olarak ileriye doğru simüle ediyoruzHer bir için .X1(i)|X0(i)N(X0(i),1)N

    Bu o zaman, uygunluk hesaplamak , burada olduğu ortalama ve varyans ile normal yoğunluk (gözlem yoğunluğumuz). gözlemini üretme olasılığı daha yüksek olan parçacıklara daha fazla ağırlık vermek istiyoruz . Bu ağırlıkları normalleştiriyoruz, böylece toplamları 1.w~t(i)=ϕ(yt;xt(i),1)ϕ(x;μ,σ2)μσ2yt

  3. Partikülleri bu ağırlıklara göre yeniden . Bir parçacığın tam bir yolu olduğuna dikkat edin (yani yalnızca son noktayı yeniden örneklemeyin, olarak ifade ettikleri her şey ).wtxx0:t(i)

Tüm seriyi işleyene kadar parçacıkların yeniden örneklenmiş versiyonu ile ilerleyerek 2. adıma geri dönün.

R'deki bir uygulama şu şekildedir:

# Simulate some fake data
set.seed(123)

tau <- 100
x <- cumsum(rnorm(tau))
y <- x + rnorm(tau)

# Begin particle filter
N <- 1000
x.pf <- matrix(rep(NA,(tau+1)*N),nrow=tau+1)

# 1. Initialize
x.pf[1, ] <- rnorm(N)
m <- rep(NA,tau)
for (t in 2:(tau+1)) {
  # 2. Importance sampling step
  x.pf[t, ] <- x.pf[t-1,] + rnorm(N)

  #Likelihood
  w.tilde <- dnorm(y[t-1], mean=x.pf[t, ])

  #Normalize
  w <- w.tilde/sum(w.tilde)

  # NOTE: This step isn't part of your description of the algorithm, but I'm going to compute the mean
  # of the particle distribution here to compare with the Kalman filter later. Note that this is done BEFORE resampling
  m[t-1] <- sum(w*x.pf[t,])

  # 3. Resampling step
  s <- sample(1:N, size=N, replace=TRUE, prob=w)

  # Note: resample WHOLE path, not just x.pf[t, ]
  x.pf <- x.pf[, s]
}

plot(x)
lines(m,col="red")

# Let's do the Kalman filter to compare
library(dlm)
lines(dropFirst(dlmFilter(y, dlmModPoly(order=1))$m), col="blue")

legend("topleft", legend = c("Actual x", "Particle filter (mean)", "Kalman filter"), col=c("black","red","blue"), lwd=1)

Ortaya çıkan grafik:resim açıklamasını buraya girin

Yararlı bir öğretici Doucet ve Johansen tarafından verilen öğreticidir, buraya bakın .


işareti noktanız için) algoritmasını uygularken -> ?? Çok teşekkür ederim. Bu model altında çalışan bir önyükleme filtresi var. Sadece t-th parçacıklarını değil, yolları yeniden örnekleme vurgusu için teşekkürler. X1(i)|X0(i)N(0,1)X1(i)|X0(i)N(X0(i),1)
tintinthong

Doğru, yazım hatası düzeltildi
Chris Haug

Yolların yeniden örneklenmesi gerekmiyor mu? Diğer literatürden, yolları örneklemeye gerek yoktur. Her adımda parçacıkları örneklemem gerekiyor. Yolları yeniden örneklemek için bir neden olup olmadığını merak ediyordum
tintinthong
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.