Kalman Filtresi ve R ile bir uygulaması

Murat Koptur
3 min readFeb 19, 2020

--

Kaynak: Wikipedia.

İlk olarak Kalman Filtresinin tanımı ile başlayalım. Adında filtre kelimesi geçiyor olsada, Kalman Filtresi aslında bir tahminleme (estimation) yöntemidir. Zaman boyunca gözlemlenen ve gürültü (noise) vb. hatalar içeren gözlemlere dayalı olarak bilinmeyen değişkenlerin tahminlerini üretir. Daha açık bir şekilde ifade etmek gerekirse, herhangi bir sensörden (manyetik, optik vb.) veri (grafikteki yeşil alan) topladığımızı düşünelim. Kalman filtresi, sistemin geçmiş durumlarını (grafikteki turuncu alan) ve sensörden gelen gözlemleri kullanarak, sistemin gelecek durumunu tahmin etmeye çalışır (grafikteki mavi alan).

Kaynak: https://www.kalmanfilter.net/kalman1d.html

uᵢ sıfır ortalamaya sahip beyaz gürültü (white noise) olmak üzere, n-inci mertebeden fark denklemi ile tanımlanan bir dinamik süreç (dynamic process)

şeklinde yazılabilir. Burada

başlangıç değerleridir. Fark denklemini matris formunda

şeklinde ifade edebiliriz. Buradan da

durum uzayı modeli (state-space model) elde edilir. Daha genel hali ile bu ifade

şeklinde yazılabilir. Burada ilk eşitlik süreç modeli (process model), ikinci eşitlik ise ölçüm modeli (measurement model) olarak adlandırılır. Yeni xᵢ₊₁ durumu, önceki durumların ve gürültü sürecinin doğrusal birleşimi olarak ifade edilebilir.

Kalman filtresi, x sistem durumu ve z gözlemlenen değerler olmak üzere,

ve

fark denklemleri ile ifade edilebilir. Burada,

sırasıyla süreç gürültüsü ve ölçüm gürültüsü olarak adlandırılır.

UYGULAMA

İlk olarak R kodunu verelim ve üzerinden konuşalım.

library(pmhtutorial) data("Nile", package = "datasets")
plot(Nile)
filtered <- kalmanFilter(Nile,
c(0.9, 0.5, 0.5),
initialState = 1120,
initialStateCovariance = 0.5)
plot(Nile, type = "l", col = "red")
lines(seq(1871, 1970), filtered$xHatFiltered, type = "l", col = "blue")

Örnek için datasets paketindeki Nile verisetini kullandım:

Bu yazıyı hazırlarken, kolaylık olması için pmhtutorial paketindeki kalmanFilter fonksiyonunu kullandım. Pratikte, dlm paketi kullanılarak gerekli matrisler ve ön değerler tanımlanarak tahminler yapılmalıdır. Ancak bu şekilde doğru sonuca ulaşılabilir.

kalmanFilter fonksiyonu ile tahmini yaparsak,

Bu grafikte, kırmızı seri, orjinal gözlemlerimizi, mavi seri ise sistemin durumunu göstermektedir.

Faydalı bir yazı olması dileğiyle.

--

--