Bootstrap filter / Алгоритм фильтра частиц (Понимание)


12

У меня действительно нет понимания того, как работает фильтр начальной загрузки. Я примерно знаю концепции, но не могу понять некоторые детали. Этот вопрос для меня, чтобы прояснить беспорядок. Здесь я буду использовать этот популярный алгоритм фильтрации из ссылки Душе (пока я думаю, что это самая простая ссылка). Позвольте мне сначала сказать вам, что моя проблема заключается в понимании того, какие распределения известны, а какие неизвестны.

загрузочный фильтр

Это мои вопросы:

  1. В 2), каково распределение ? Известно ли это распределение ? Мы знаем это распределение для всех т ? Если это так, но что, если мы не можем взять образец из него? Забавно, что они называют это важным этапом выборки, но я не вижу распределения предложений.p(xt|xt1(i))t
  2. Кроме того, в 2) в известное распределение? «Нормализация Важность Массы средства для ш ( я ) т = ~ ш ( я ) тp(yt|x~t(i)) ? Что означает тильда нахиш? Означает ли это что-то вроде невысвеченной или ненормированной соответственно?wt(i)=w~t(i)i=1Nw~t(i)xw
  3. Я был бы признателен, если бы кто-нибудь мог привести простой игрушечный пример, используя известные дистрибутивы, чтобы использовать этот фильтр начальной загрузки. Конечная цель фильтра начальной загрузки мне не ясна.

Ответы:


10
  1. xtp(xt|xt1) p(xt|x0:t1,y1:t)

  2. x~xw~wx

  3. p(xt|y1:t)tt

Рассмотрим простую модель:

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

YXp(Xt|Y1,...,Yt)

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

Применяя алгоритм:

  1. NX0(i)N(0,1)

  2. X1(i)|X0(i)N(X0(i),1)N

    w~t(i)=ϕ(yt;xt(i),1)ϕ(x;μ,σ2)μσ2yt

  3. wtxx0:t(i)

Вернитесь к шагу 2, двигаясь вперед с измененной версией частиц, пока мы не обработаем всю серию.

Реализация в R следующая:

# 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)

Полученный график:введите описание изображения здесь

Полезный урок - Дусет и Йохансен, см. Здесь .


X1(i)|X0(i)N(0,1)X1(i)|X0(i)N(X0(i),1)
tintinthong

Это верно, я исправил опечатку
Крис Хауг

Пути не должны быть пересмотрены, не так ли? Из другой литературы нет необходимости выбирать пути. Мне просто нужно пробовать частицы на каждом шаге по времени. Мне было интересно, есть ли причина для
пересчета
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.