Particle-Filter

自舉過濾器/粒子過濾器算法(了解)

  • September 28, 2016

我真的對引導過濾器的工作原理缺乏了解。我大致了解這些概念,但我無法掌握某些細節。這個問題是讓我清理混亂。在這裡,我將使用來自 doucet 參考的流行過濾算法(到目前為止,我認為這是最簡單的參考)。首先讓我告訴你,我的問題是了解哪些分佈是已知的,哪些是未知的。

自舉過濾器

這些是我的問題:

  1. 2)、什麼是分佈? 這種分佈是否已知?我們是否知道所有人的這種分佈? 如果是這樣,但是如果我們不能從中取樣怎麼辦?有趣的是,他們將此稱為重要性抽樣步驟,但我沒有看到提案分佈。
  2. 同樣在 2) 中是一個已知的分佈?“標準化重要性權重意味著? 代字號是什麼和意思是?這是否分別意味著未重新採樣或未標準化?
  3. 如果有人能給出一個簡單的玩具示例,使用眾所周知的發行版來使用這個引導過濾器,我將不勝感激。我不清楚引導過濾器的最終目標。
  1. 那是狀態的轉移密度(),這是您的模型的一部分,因此是已知的。您確實需要在基本算法中對其進行採樣,但可以使用近似值。 這種情況下的提案分佈。使用它是因為分佈一般是不容易處理的。
  2. 是的,這就是觀測密度,它也是模型的一部分,因此是已知的。是的,這就是標準化的意思。波浪號用於表示“初步”之類的東西:是在重新採樣之前,和是在重整化之前。我猜想這樣做是為了使符號在沒有重採樣步驟的算法變體之間匹配(即始終是最終估計)。
  3. 自舉過濾器的最終目標是估計條件分佈的序列(不可觀察的狀態在,給定所有觀察結果,直到)。

考慮簡單的模型:

這是用噪聲觀察到的隨機遊走(你只觀察到, 不是)。你可以計算完全使用卡爾曼濾波器,但我們將根據您的要求使用引導濾波器。我們可以根據狀態轉移分佈、初始狀態分佈和觀察分佈(按此順序)重述模型,這對粒子濾波器更有用:

應用算法:

  1. 初始化。我們生成粒子(獨立地)根據.
  2. 我們通過生成獨立地向前模擬每個粒子, 對於每個.

然後我們計算可能性, 在哪裡是具有平均值的正態密度和方差(我們的觀察密度)。我們希望給更有可能產生觀察的粒子更多的權重我們記錄的。我們將這些權重歸一化,使它們總和為 1。 3. 我們根據這些權重重新採樣粒子. 注意一個粒子是一個完整的路徑(即不只是重新採樣最後一點,這是整個事情,他們表示為)。

回到第 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)

結果圖:在此處輸入圖像描述

Doucet 和 Johansen 提供的一個有用的教程,請參見此處

引用自:https://stats.stackexchange.com/questions/237468

comments powered by Disqus

相關問答