Фільтр завантажувального фільтра / алгоритм фільтрування частинок (розуміння)


12

Я справді не розумію, як працює фільтр завантаження. Я приблизно знаю ці поняття, але я не можу зрозуміти певні деталі. Це питання для мене, щоб усунути безлад. Тут я буду використовувати цей популярний алгоритм фільтра з посилання на doucet (поки що я думаю, що це найпростіша посилання). Дозвольте спочатку сказати вам, що моя проблема полягає в розумінні того, які розподіли відомі, а які - невідомі.

завантажувальний фільтр

Це мої запитання:

  1. У 2) що таке розподіл ? Чи відомий цей розподіл ? Чи знаємо ми цей розподіл для всіх ? Якщо так, але що робити, якщо ми не можемо взяти з нього вибірку? Смішно, що вони називають цей крок вибірки важливості, але я не бачу розповсюдження пропозицій.p(хт|хт-1(i))т
  2. Крім того, в 2) є відомо розподіл? "Нормалізувати значення ваг означає ? Що означає тильда на і ? Чи означає це щось на зразок непереадаптованого або ненормованого відповідно?p(ут|х~т(i))шт(i)=ш~т(i)i=1Nш~т(i)хш
  3. Буду вдячний, якщо хтось міг би навести простий приклад іграшки, використовуючи відомі дистрибутиви, щоб використовувати цей фільтр завантаження. Кінцева мета фільтра завантажувача мені незрозуміла.

Відповіді:


10
  1. Це щільність переходу стану ( ), яка є частиною вашої моделі і тому відома. Вам потрібно пробити вибірку з нього в базовому алгоритмі, але можливі наближення. - розподіл пропозицій у цьому випадку. Він використовується тому, що розподіл як правило, не простежується. p ( x t | x t - 1 ) p ( x t | x 0 : t - 1 , y 1 : t )хтp(хт|хт-1) p(хт|х0:т-1,у1:т)

  2. Так, це щільність спостереження, яка також є частиною моделі, і тому відома. Так, саме це означає нормалізацію. Тільда використовуються для позначення що - щось на зразок «попередньої»: є до того передіскретізаціей, і є перед тим перенормировки. Я б припустив, що це робиться таким чином, щоб позначення співпадали між варіантами алгоритму, які не мають кроку перекомпонування (тобто завжди є остаточною оцінкою). x ˜ w wxх~хш~шх

  3. Кінцева мета фільтра завантаження - оцінити послідовність умовних розподілів (стан, який не спостерігається при , з урахуванням усіх спостережень до ).t tp(хт|у1:т)тт

Розглянемо просту модель:

Хт=Хт-1+ηт,ηтN(0,1)
Х0N(0,1)
Yт=Хт+εт,εтN(0,1)

Це випадкова хода, що спостерігається із шумом (ви спостерігаєте лише , а не ). Ви можете обчислити саме за допомогою фільтра Kalman, але ми використаємо фільтр завантаження на ваш запит. Ми можемо відновити модель з точки зору розподілу стану переходу, початкового розподілу стану та розподілу спостережень (у такому порядку), що є більш корисним для фільтра частинок:YХp(Хт|Y1,...,Yт)

Хт|Хт-1N(Хт-1,1)
Х0N(0,1)
Yт|ХтN(Хт,1)

Застосування алгоритму:

  1. Ініціалізація. Ми генеруємо частинок (незалежно) відповідно до .NХ0(i)N(0,1)

  2. Ми моделюємо кожну частинку вперед незалежно, генеруючи , для кожного .Х1(i)|Х0(i)N(Х0(i),1)N

    Потім ми обчислюємо ймовірність , де - нормальна щільність із середнім та дисперсією (наша щільність спостереження). Ми хочемо надати більше ваги частинкам, які швидше за все виробляють спостереження яке ми записали. Ми нормалізуємо ці ваги, щоб вони дорівнювали 1.ш~т(i)=ϕ(ут;хт(i),1)ϕ(х;мк,σ2)мкσ2ут

  3. Ми перепробовуємо частинки відповідно до цих ваг . Зауважте, що частинка - це повний шлях (тобто не перепробовуйте останню точку, це все, що вони позначають як ).штхх0:т(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)

Отриманий графік:введіть тут опис зображення

Корисний підручник - підручник Дусета та Йохансена, дивіться тут .


Для вашого пункту 2) в застосуванні алгоритму -> ?? Дуже дякую. У мене працює робочий фільтр завантажувача під цією моделлю. Дякую за акцент на перестановці шляхів, а не лише на т-й частинках. X ( i ) 1 | X ( i ) 0N ( X ( i ) 0 , 1 )Х1(i)|Х0(i)N(0,1)Х1(i)|Х0(i)N(Х0(i),1)
tintinthong

Це правильно, я зафіксував помилку
Кріс Хауг,

Шляхи не повинні бути повторно відібрані, чи вони ?? З іншої літератури не потрібно вибирати шляхи. Мені просто потрібно пробити частинки на кожному кроці. Мені було цікаво, чи є причина для
повторного
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.