Filtru Kalman, Ghidul Idiot complet
![Filtru Kalman, ghidul Idiot complet la programare, algoritmi, și nu doar (numai) Filtru Kalman, ghidul Idiot complet la programare, algoritmi, și nu numai](https://images-on-off.com/images/45/filtrkalmanarukovodstvopolnogoidiotaopro-6a43894e.png)
Deci, ce este filtrul Kalman. Să presupunem că aveți o anumită valoare X schimbă cu timpul. Ai un dispozitiv care măsoară cantitatea de X, cu unele erori. Vrei să evalueze ceea ce este de fapt egală cu valoarea lui X. De exemplu, în cazul acțiunilor Xk poate fi adevărat prețul acțiunilor la momentul k (este determinată de veniturile companiei, rata de schimb, așteptările investitorilor și așa mai departe). Avem doar un singur mod de a măsura această valoare - du-te la schimbul și vezi citate. Dar cotațiile de pe bursă sunt afectate de mai mulți factori prețurile variază foarte mult, iar valoarea măsurată Yk poate fi diferită de Xx. Kalman algoritm ne permite să evalueze valoarea reală a Xk bazată pe istoricul modificărilor valorii măsurate Yk. Acest lucru, desigur, face o serie de ipoteze cu privire la relația dintre Y și X și natura X. schimbării
Numărul sugestia 1
Ie la momentul valoarea X k este o combinație liniară de valori ale lui X în ultima dată, semnal de control U și W. zgomot deseori controlează semnal U este absent în aplicațiile reale.
Care este semnalul de control? Să ne întoarcem la exemplul nostru din acțiuni. Să presupunem că Federal Reserve este activ pentru imprimare de bani, cum ar fi 600 de miliarde de $, banii turnat în piață un râu larg și pentru a muta în mod inevitabil, prețurile acțiunilor în sus. Acesta este semnalul de control.
Dar să revenim la formula noastra, avem nevoie pentru a face o altă specificație importantă. w Zgomotul trebuie să aibă o distribuție normală cu variație dW. În practică, de multe ori modul în care este aici, la îndemână, vom juca o teorema limită centrală. pentru că zgomotul este, de obicei, o mare colecție de multe necunoscute.
Numărul sugestia 2
Ie Valoarea noastră măsurată Y este o combinație liniară a valorii reale a X și eroarea de măsurare V. În acest caz, ipoteza suplimentară se face că eroarea de măsurare are, de asemenea, o distribuție normală cu variație sale dV. Foarte adesea, în practică, H = 1.
Ceea ce am făcut doar? Am construit un model care descrie sistemul nostru în această notă, până când nu se menționează nici un filtru Kalman.
Ce vrem să facem?
Vrem să obțineți un fel de ecuație
permițându-ne să evalueze valoarea reală a X se bazează pe estimări istorice și valorile măsurate. cititorul certăreț va observa că aici am folosi în mod constant X, de fapt, înainte de a folosi X pentru a indica valoarea reală, iar acum pentru a evalua valoarea reală. Acest lucru este important, deoarece adevărata valoare reală, nu putem ști. Eu doar încerc să nu aglomerați cu formula cu noi entități.
Apoi, de obicei, du-te calcule matematice multiple, printre care se numără o corecție parțială extrapolare. Omite toate interesați pot găsi cu ușurință o mulțime de materiale în Google. În final, obținem o expresie pentru estimarea X:
În cazul în care Kk - este câștigul Kalman. Este această valoare în timpul funcționării și determină algoritmul de filtrare Kalman. În care filtrul Kalman este o valoare optimă câștig la dispersii dw predeterminate și dV. Cu cât mai bine apreciați aceste dispersii, cu atât mai bine performanța filtrului Kalman.
Acum, imaginați-vă că X și Y nu este o valoare unidimensional și vectorul. A, B și H - matrice. Eroare și zgomot V și W, de asemenea, vectori. Se pare că, în acest caz, toate ecuațiile vor funcționa în același mod, și algoritmul de filtrare Kalman poate fi ușor generalizată la valoarea multidimensională.
Și acum, prin tradiție, un exemplu în R
filtru Kalman pot fi găsite în mai multe module R, de exemplu, voi folosi o implementare a modulului dlm. În acest exemplu, vom folosi filtrul Kalman la valorile indicelui S-P500.
Să presupunem că semnalul de control nu este prezent, este, desigur, de fapt, nu este, dar evaluarea semnalului de control este o sarcină separată. În plus, sarcinile individuale sunt estimarea parametrilor varianțe dV și dW. De exemplu nostru, am luat niște valori empiric. Dacă ne apropiem de această sarcină bine, atunci acestea pot fi estimate din volatilitatea de pe piață.
Pentru comparație, pe grafic, verde, s-a adăugat 10 zile media exponențială în mișcare pentru a obține imaginea:
![Filtru Kalman, ghidul Idiot complet la programare, algoritmi, și nu numai (complet) Filtru Kalman, ghidul Idiot complet la programare, algoritmi, și nu numai](https://images-on-off.com/images/45/filtrkalmanarukovodstvopolnogoidiotaopro-48fe28c4.png)
Multe mulțumiri cititorului de numele Kirill pentru codul de probă găsit în eroare.
SERGE San Francisco, California, Statele Unite Buna ziua, eu sunt un senior inginer de software într-o companie de web mare. În principal, interesat în minerit de date și de învățare mașină. Mea limbaj de programare „nativ“ este Java, deși cred că Haskell și FP, în general, este mai bine. Am experienta decente cu C # .Net și stiva, de asemenea. În timpul meu liber sunt fericit să concureze cu oameni deștepți pe Topcoder și Kaggle. Profilul meu TC este aici. Kaggle profil aici Dacă vrei să vorbești, doar trimite un mesaj: e d u n o v @ g m o I l. c o m Vizualizați profilul meu complet