離散貝葉斯過濾器
Kalman 濾波器屬于貝葉斯濾波器家族一個成員茎活。大多數(shù)教科書上昙沦,都將 Kalman 濾波器看作 Bayesian 公式的一種表現(xiàn),但是解釋如何將貝葉斯公式應用到 Kalman 濾波等式的方式因為過于抽象载荔,所以晦澀難懂盾饮。
這種方式讀者對數(shù)學的幾個領域有相當深刻的理解,而且還把許多理解和形成對情況的直觀把握交給了讀者懒熙。
今天我們這將用另一種方式來解釋這個問題丘损,這歸功于迪特·福克斯和塞巴斯蒂安·特倫的工作工扎。使用貝葉斯統(tǒng)計來追蹤通過走廊的目標徘钥,這種方式比較直覺,可以用機器人肢娘,不過這里用狗來代替機器人呈础。小狗要比機器人更難預測,這給濾波器預測帶來一定難度橱健。能找到的第一個公開的例子似乎在 fox1999[1]而钞,在 fox2003[2]中有一個更完整的例子。
現(xiàn)在讓我們用一個簡單的思考實驗拘荡,就像我們對g-h濾波器所做的那樣臼节,來看看我們如何推理使用概率來過濾和跟蹤。
跟蹤小狗
讓我們從一個簡單的問題開始。假設在空間中有一條小狗网缝,所以有人會將自己小狗帶去工作巨税。偶爾,狗會走出辦公室粉臊,在大廳里走來走去草添。我們想追蹤他們。所以在一次黑客競賽中扼仲,有人發(fā)明了一個聲納傳感器來連接狗的項圈果元。項圈發(fā)出信號,通過監(jiān)聽回聲犀盟,然后計算回聲的速度,我們可以判斷狗是否停留某一個門前蝇狼。還可以感知狗何時離開阅畴,傳輸告狗向哪個方向移動。通過wifi 連接到網絡迅耘,每秒發(fā)送一次更新贱枣。
將跟蹤設備給小狗配套上,接下里使用 Python 來準備編寫代碼來跟蹤小狗如何穿過颤专。乍一看纽哥,臉紅可能看起來不可能。如果我開始監(jiān)聽小狗佩戴的傳感器栖秕,我可能會讀門春塌,大廳,大廳等等簇捍。接下來看一看如何使用這些信息來確定小狗在哪里只壳?
可以將問題簡化,以便于繪圖暑塑,假設走廊中只有 10 個位置吼句,用數(shù)字從 0 到 9 表示,其中 1 在 0 的右側事格,出于稍后將明確的原因惕艳,還將假定走廊是圓形或矩形的。如果你從位置9向右移動驹愚,你將處于位置0远搪。
開始監(jiān)聽傳感器,僅憑監(jiān)聽器還無法沒有理由確定小狗在走廊的位置么鹤。小狗出現(xiàn)走廊在任何的位置上可能性都是一樣的终娃。有10個位置,所以小狗出現(xiàn)任何位置的概率都是 1/10。
import numpy as np
belief = np.array([1/10]*10)
print(belief)
[0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]
在貝葉斯統(tǒng)計學中棠耕。將測量或其他信息和先驗整合的概率余佛。準確地說,這叫做先驗概率分布窍荧。概率分布是一個事件所有可能概率的集合辉巡,概率分布總是和為 1,概率分布列出了所有可能的事件和每一個事件發(fā)生的概率蕊退。
大家可能都接觸過概率郊楣,比如“今天下雨的概率是30%”。貝葉斯統(tǒng)計學是概率論的重要改進瓤荔,因為貝葉斯統(tǒng)計學把概率看作是對某個事件的一種信念净蚤。讓我們舉個例子,如果不斷反復地擲一個硬幣输硝,就會得到 50% 的正面和 50% 的反面今瀑。這是大家熟悉頻率統(tǒng)計量,與貝葉斯統(tǒng)計不同点把,計算是基于事件發(fā)生的頻率橘荠。
再做一次擲硬幣實驗。相信這件事是從哪個方向降落的郎逃?經常光顧的概率對此沒什么可說的哥童,它只會說 50% 的硬幣會以人頭的形式拋擲土地。在某些方面褒翰,給硬幣的當前狀態(tài)分配一個概率是沒有意義的贮懈。要么是正面的,要么是反面的优训,我們只是不知道是哪面會朝上错邦。Bayes 把這看作是一個關于某個事件的信念—信念或知識的力量,認為這個硬幣擲硬幣是正面朝上的 50%型宙。
天氣預報就是貝葉斯經驗撬呢, 貝葉斯統(tǒng)計考慮了過去的信息(先驗)。我們觀察到每 100 天下 4 次雨妆兑。由此看來魂拦,明天下雨的可能性是 1/25。天氣預報不是這樣做的搁嗓。如果我知道今天下雨芯勘,明天很可能會下雨。天氣預報是貝葉斯的腺逛。
在實踐中荷愕,統(tǒng)計學家頻率專家和貝葉斯技術。有時很難得到先驗信息是困難,利用統(tǒng)計也是無法獲取到安疗,抛杨。在這本書中我可以得到一些經驗(先驗)。談論某件事發(fā)生的概率時荐类,通常會根據(jù)我們經驗怖现,以及之前你對這件事了解程度而得出先驗概率,這就是采用貝葉斯方法玉罐。
現(xiàn)在讓我們創(chuàng)建走廊的地圖屈嗤。我們將把前兩個門放在一起,然后再把另一個門距離稍遠的位置吊输。用 1 表示門饶号,用 0 表示墻:采用貝葉斯方法。
開始監(jiān)聽季蚂,西蒙在網絡上的傳輸讨韭,我從傳感器得到的第一個數(shù)據(jù)是門。暫時假設傳感器總是返回正確的答案癣蟋。但是僅憑數(shù)據(jù)還無法確定具體是哪一個扇門,無法確定他就在第一狰闪、第二或第三扇門前面疯搅。每個門都有我能做的事。所有的門都有相同的可能性埋泵,其中有三個幔欧,所以我給每個門指定1/3的概率。
import kf_book.book_plots as book_plots
from kf_book.book_plots import figsize, set_figsize
import matplotlib.pyplot as plt
belief = np.array([1/3, 1/3, 0, 0, 0, 0, 0, 0, 1/3, 0])
book_plots.bar_plot(belief)