Particle-Filter
自舉過濾器/粒子過濾器算法(了解)
我真的對引導過濾器的工作原理缺乏了解。我大致了解這些概念,但我無法掌握某些細節。這個問題是讓我清理混亂。在這裡,我將使用來自 doucet 參考的流行過濾算法(到目前為止,我認為這是最簡單的參考)。首先讓我告訴你,我的問題是了解哪些分佈是已知的,哪些是未知的。
這些是我的問題:
- 2)、什麼是分佈? 這種分佈是否已知?我們是否知道所有人的這種分佈? 如果是這樣,但是如果我們不能從中取樣怎麼辦?有趣的是,他們將此稱為重要性抽樣步驟,但我沒有看到提案分佈。
- 同樣在 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 提供的一個有用的教程,請參見此處。