卡爾曼濾波(Kalman Filtering)是一個知名度頗高的數據處理方法(至少名字挺咋呼),本文嘗試提供一個對它的簡單理解 :)
馬爾可夫模型(Markov model)
馬爾可夫模型是一個研究離散時間隨機過程(Xi, i = 1, 2, ,3 ,4 ...)的方法。它的主要思想是將各個事件Xi的互相影響區分開:假設每一個事件xi只與前一次發生的事件Xi-1直接相關,而與再之前的事件Xi-2, Xi-3等不直接產生關系。用條件概率的形式表達就是:
P(Xi | X0, X1, X2...Xi-2, Xi-1) = P(Xi | Xi-1) (對於判斷Xi的狀況,一旦知道Xi-1,其余Xi-2,...X0等事件就不能再提供額外的信息)
這種簡化看似太過理想(每個事件僅直接影響下一個事件,而不直接影響之后的事件),但在實踐中卻表現頗佳,在我看來原因有二:一是在日常現象中,我們一般也默認事件的發生順序和相關性是正聯系的,而相鄰事件的相關性也最大,只考慮相鄰事件的互相影響抓住了事物間的主要矛盾;二是非相鄰事件間不是不互相影響,而是不直接影響,他們直接的相關關系通過相鄰事件依次傳遞下去,產生了間接的影響。
我們遇見的很多事件,如價格漲落、氣候變化等都可以用馬爾可夫模型進行近似。讓我們從反面來理解,我舉一個人造的不適合這個模型的例子:兩個獨立的隨機事件Ai, Bi, 他們的結果混雜在了一起,如a1, b1, b2, a2, a3, b3... 這種情況下馬爾可夫模型就很難進行分析。不過對於這種極端的例子,其他的分析方法恐怕也不好發揮作用,因為我們常見的時間序列類型的分析方法,大多都基於馬爾可夫模型,或在其中進行一定的修改。
因為事件間的相關關系是挨個逐次傳播,像鏈式進行,這個模型又被稱為馬爾可夫鏈(Markov chain)。這種只與前一個事件相關的性質被成為馬爾可夫性質。前一個事件與后一個事件的關聯關系稱為狀態轉移。
隱馬爾可夫模型(Hidden Markov model)
隱馬爾可夫模型是馬爾可夫模型的一個深入發展:考慮到了觀察和測量中誤差的影響。形象的理解,我們可以看作有一個表世界和里世界,里世界就是上面提到的馬爾可夫模型(理論上的離散事件Xi),而表世界里的就是對這個模型的一次次觀測(Yi)。觀測的結果是里世界的一個反映。這里的假設是每次觀測結果Yi只與里世界對應的事件Xi有關。用條件概率來表達就是:
P(Yi | X0, X1, ...Xi, Xi+1, ...) = P(Yi | Xi)
還有一個有用的結論是P(... Yi-1, Yi, Yi+1,... | Xi) = P(Yi | ... Yi-1, Yi+1,... Xi) * P(... Yi-1, Yi+1,... | Xi) = P(Yi | Xi) * P(... Yi-1, Yi+1,... | Xi),即Yi相對於其他的觀測值,關於Xi條件獨立。
卡爾曼濾波(Kalman filtering)
卡爾曼濾波是一種數據處理方法,因為這種方法最早用來設計處理信號中的噪聲,起到濾波改善信號的作用,所以名字中帶有filter,也就是過濾噪聲的意思。
卡爾曼濾波的方法建立在隱馬爾可夫模型上,並帶有更強的假設:里世界中各事件Xi間的狀態轉移為線性關系(即Xi的狀態可由Xi-1的狀態經線性組合得到),可以附帶一個正態(高斯)噪音。從里世界Xi到表世界Yi的狀態轉移也要求是線性的,可以帶一個正態(高斯)誤差。用公式表達就是下面這樣:
xi = Axi-1 + qi-1
yi = Hxi + ri
其中A和H可以是矩陣(對應xi,yi為多維向量),也可以是常數(對應xi,yi為一維)。A和H代表的,就是Xi間的狀態轉移關系和Xi與Yi間的狀態轉移關系。如果要應用卡爾曼濾波,一般要求A和H,即轉移關系,也就是理論模型和觀測模型已知。
qi和ri按理論要求是均值為0的正態噪音,方差一般通過估量得到。其中ri是表世界測量過程中產生的噪聲,qi是里世界狀態轉移中的不確定性。下面我們可以看到,卡爾曼濾波是比較穩健的方法,即使qi和ri的方差估量不准確(甚至在某些情況下不滿足正態分布),也往往可以收斂到正確的結果。這在一定程度上是因為卡爾曼濾波采用了類似移動平均的方法,而求平均的方法對均值為0的噪音,排除效果比較好,即使對噪音的方差或高階矩沒有好的認識。
卡爾曼濾波的公式長這樣:
xi = Axi-1 + Ki * (yi - HAxi-1) (式一)= (1 - KiH) Axi-1+ Ki * yi (式二)
式一的形象化理解是,我先用A乘以前一項Xi-1得到一個對Xi的大致估計Axi-1,然后我再用觀測值yi與估計Axi-1的差值乘一個系數,作為對大致估計誤差的補償,綜合這兩項得到最終估計xi。
式二的形象化理解式,我用大致估計Axi-1和通過觀測值yi反推得到實際值(Ki * yi ~ KiH * xi)做一個加權平均,一個系數為KiH,一個系數為1-KiH,平均得到最終估計。
這兩個理解本質上是等價的。因此卡爾曼濾波的實際含義就是在對里世界里的模型有一定認識的前提下,通過對系列觀測數據的綜合分析,濾去觀測中可能存在的噪音和系統狀態轉移可能產生的不穩定性,得到一個相對穩定的理論值。而這也就是濾波的含義。
上面的式子里有一個Ki,稱為每一個事件的卡爾曼增益。從上面式二的形象化理解可以看出,這個增益體現的就是新的觀測值能給我對實際值的估計帶來多少新的信息。
Ki = Pi * HT * (H Pi HT + R)-1
Pi = A Ci-1 AT + Q
Ci = (I - Ki H) Pi
計算Ki的公式相對較為復雜,還涉及另外兩個變量Pi, 預測協方差(predict covariance),以及Ci,校正協方差(correct covariance)。其中Q、R是對噪音qi和ri的估計值。
下面我們通過一個簡單的一維例子來得到一個對這個方法更直觀的理解:
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
xi | 5.8 | 6.46 | 7.63 | 9.08 | 10.29 | 11.7 | 13.51 | 15.64 | 17.61 | 19.59 | 22.46 |
yi | 7.18 | 8.323 | 8.19 | 10.69 | 11.9 | 13.08 | 15.94 | 16.88 | 20.19 | 20.84 | 25.20 |
上面的表格中,xi間的狀態轉移關系為xi = 1.1 * xi-1 + qi-1,其中qi是[0, 1]間的均勻分布。
xi到yi的轉移關系是yi = 1.05 * xi + ri,其中ri是[0, 2]間的均勻分布。
因為是一維的例子,所有矩陣均為一維,退化為一個數。A = AT = 1.1, H = HT =1.05
可以看到這里的均布噪聲和要求的正態噪聲有一定區別,但我們可以看到卡爾曼濾波依然能取得不錯的效果。
暫估計Q = R = 1
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
xi(理論值) | 5.8 | 6.46 | 7.63 | 9.08 | 10.29 | 11.7 | 13.51 | 15.64 | 17.61 | 19.59 | 22.46 |
xi(計算值) | 3.59 | 6.47 | 7.56 | 9.54 | 11.04 | 12.35 | 14.63 | 16.08 | 18.7 | 20.1 | 23.35 |
ki | 0.5 | 0.6 | 0.62 | 0.62 | 0.62 | 0.62 | 0.62 | 0.62 | 0.62 | 0.62 | 0.62 |
pi | 1 | 1.58 | 1.72 | 1.72 | 1.72 | 1.72 | 1.72 | 1.72 | 1.72 | 1.72 | 1.72 |
ci | 0.48 | 0.58 | 1.59 | 0.59 | 0.59 | 0.59 | 0.59 | 0.59 | 0.59 | 0.59 | 0.59 |
從例子中可以看到,xi的計算值經過少量迭代即迅速逼近計算值,說明只要模型及狀態轉移符合要求,即使噪聲估計不很准確,一樣能得到穩健及有效的估計結果。
簡單總結
卡爾曼濾波是在滿足以下3個條件(1,2較為重要,3在一定程度上可放松)時的,一種穩健有效的去除系統和測量誤差的數據處理方法。:
1.隱馬爾可夫模型;2.狀態轉移為線性;3.系統不確定性和測量誤差滿足均值為0的正態分布;