Filtro de Kalman multidimensional. Usando filtros de Kalman. Matriz de covarianza de estimación de vectores de estado

El filtro de Kalman se utiliza ampliamente en aplicaciones econométricas y de ingeniería que van desde radares y sistemas visión técnica para estimar los parámetros de los modelos macroeconómicos. El filtrado de Kalman es una parte importante de la teoría del control y juega un papel importante en la creación de sistemas de control. Junto con un controlador lineal-cuadrático, el filtro de Kalman le permite resolver el problema del control lineal-cuadrático gaussiano. Filtro Kalman y regulador cuadrático lineal - posible solución Problemas más fundamentales en la teoría del control.

En la mayoría de las aplicaciones, la cantidad de parámetros que definen el estado de un objeto es mayor que la cantidad de parámetros observables disponibles para medición. Utilizando un modelo de un objeto basado en una serie de mediciones disponibles, el filtro de Kalman permite obtener una estimación del estado interno.

El filtro de Kalman está diseñado para estimar recursivamente el vector de estado de un sistema dinámico conocido a priori, es decir, para calcular el estado actual del sistema es necesario conocer la medida actual, así como estado anterior el filtro mismo. Por lo tanto, el filtro de Kalman, como muchos otros filtros recursivos, se implementa en una representación de tiempo, en lugar de frecuencia.

Un claro ejemplo de las capacidades del filtro es la obtención de estimaciones precisas y continuamente actualizadas de la posición y velocidad de algún objeto en función de los resultados de una serie temporal de mediciones inexactas de su ubicación. Por ejemplo, en el radar la tarea es rastrear un objetivo, determinar su ubicación, velocidad y aceleración, mientras que los resultados de las mediciones llegan gradualmente y son muy ruidosos. El filtro de Kalman utiliza un modelo probabilístico de la dinámica del objetivo que especifica el tipo de movimiento probable del objeto, lo que reduce el impacto del ruido y proporciona buenas estimaciones de la posición del objeto en el presente, futuro o pasado.

Introducción

El filtro de Kalman opera con el concepto de vector de estado del sistema (un conjunto de parámetros que describen el estado del sistema en un momento determinado) y su descripción estadística. EN caso general la dinámica de un determinado vector de estado se describe mediante las densidades de probabilidad de la distribución de sus componentes en cada momento del tiempo. Si hay una cierta modelo matemático Hicimos observaciones del sistema, así como un modelo de cambio a priori en los parámetros del vector de estado (es decir, como un proceso formativo de Markov), podemos escribir una ecuación para la densidad de probabilidad posterior del vector de estado en cualquier momento. Esta ecuación diferencial se llama ecuación de Stratonovich. La ecuación de Stratonovich. vista general no se puede solucionar. Solución analítica se puede obtener solo en el caso de una serie de restricciones (supuestos):

  • Gaussianidad de las densidades de probabilidad a priori y posterior del vector de estado en cualquier momento (incluido el inicial)
  • Gaussianidad del ruido de conformación.
  • Gaussianidad del ruido de observación.
  • blancura del ruido de observación
  • linealidad del modelo de observación
  • linealidad del modelo del proceso de formación (que, recordemos, debe ser un proceso de Markov)

El filtro de Kalman clásico es una ecuación para calcular el primer y segundo momento de la densidad de probabilidad posterior (en el sentido de un vector de expectativas matemáticas y una matriz de varianzas, incluidas las recíprocas) bajo restricciones dadas. Debido a que para la densidad de probabilidad normal la expectativa matemática y la matriz de dispersión definen completamente la densidad de probabilidad, podemos decir que el filtro de Kalman calcula la densidad de probabilidad posterior del vector de estado en cada momento. Esto significa que describe completamente el vector de estado como una cantidad vectorial aleatoria.

Los valores calculados de las expectativas matemáticas son estimaciones óptimas según el criterio del error cuadrático medio, que determina su uso generalizado.

Existen varios tipos de filtro de Kalman, que se diferencian en las aproximaciones y trucos que se deben utilizar para reducir el filtro a la forma descrita y reducir sus dimensiones:

  • Filtro de Kalman extendido (EKF). Reducción de modelos observacionales no lineales y el proceso de conformación mediante linealización mediante expansión de series de Taylor.
  • Filtro Kalman sin perfume (UKF). Utilizado en problemas en los que la linealización simple conduce a la destrucción. conexiones útiles entre los componentes del vector de estado. En este caso, la "linealización" se basa en la transformación sin olor.
  • Filtro conjunto de Kalman (EnKF). Se utiliza para reducir la dimensión de un problema.
  • Posibles opciones con no lineal. filtro adicional, lo que permite reducir las observaciones no gaussianas a las normales.
  • Son posibles opciones con un filtro "blanqueador", lo que le permite trabajar con ruido "coloreado"
  • etc.

Modelo de sistema dinámico utilizado.

Los filtros de Kalman se basan en sistemas dinámicos lineales muestreados en el tiempo. Estos sistemas se modelan mediante cadenas de Markov utilizando operadores lineales y términos con distribución normal. El estado del sistema se describe mediante un vector de dimensión finita: el vector de estado. En cada latido del tiempo operador lineal actúa sobre el vector de estado y lo transfiere a otro vector de estado (cambio de estado determinista), se agrega algún vector ruido normal(factores aleatorios) y, en el caso general, un vector de control que modela el impacto del sistema de control. El filtro de Kalman puede considerarse un análogo de los modelos ocultos de Markov, con la diferencia de que las variables que describen el estado del sistema son elementos de un conjunto infinito. números reales(a diferencia del conjunto finito de espacio de estados en los modelos ocultos de Markov). Además, los modelos ocultos de Markov pueden utilizar distribuciones arbitrarias para valores de vectores de estado posteriores, a diferencia del filtro de Kalman, que utiliza un modelo de ruido distribuido normalmente. Existe una relación estricta entre el filtro de Kalman y las ecuaciones ocultas del modelo de Markov. Roweis y Chahramani (1999) ofrecen una revisión de estos y otros modelos.

Cuando se utiliza el filtro de Kalman para obtener estimaciones del vector de estado del proceso a partir de una serie de mediciones ruidosas, es necesario representar un modelo este proceso de acuerdo con la estructura del filtro - en forma de ecuación matricial cierto tipo. Por cada latido k funcionamiento del filtro, es necesario determinar las matrices de acuerdo con la siguiente descripción: evolución del proceso F k; matriz de observación h k; matriz de covarianza del proceso q k; matriz de covarianza del ruido de medición R k; en presencia de acciones de control: una matriz de sus coeficientes B k .

muchos son reales sistemas dinámicos no puede ser descrito con precisión por este modelo. En la práctica, la dinámica que no se tiene en cuenta en el modelo puede perjudicar gravemente el rendimiento del filtro, especialmente cuando se trabaja con una señal de entrada estocástica desconocida. Además, la dinámica que no se tiene en cuenta en el modelo puede hacer que el filtro sea inestable. Por otro lado, el ruido blanco independiente como señal no hará que el algoritmo diverja. El problema de separar el ruido medido de la dinámica que no se tiene en cuenta en el modelo es complejo y se resuelve utilizando la teoría de los sistemas de control robustos.

filtro de kalman

El filtro de Kalman es un tipo de filtro recursivo. Para calcular la evaluación del estado del sistema para el ciclo de operación actual, se necesita una evaluación del estado (en forma de evaluación del estado del sistema y una estimación del error al determinar este estado) en el ciclo anterior de operación y mediciones en el ciclo actual. Esta propiedad lo distingue de los filtros de paquetes, que requieren el conocimiento del historial de mediciones y/o estimaciones durante el ciclo de operación actual. Además, por notación entenderemos la estimación del vector verdadero en este momento. norte teniendo en cuenta las medidas desde el inicio de la obra hasta metro inclusivo.

El estado del filtro está especificado por dos variables:

Las iteraciones del filtro de Kalman se dividen en dos fases: extrapolación y corrección. Durante la extrapolación, el filtro recibe evaluación preliminar estado del sistema (en la literatura en idioma ruso a menudo se denota , donde significa "extrapolación", y k- número del ciclo en el que se recibió) al paso actual según la evaluación final del estado con paso previo(o una estimación preliminar para el siguiente paso basada en la estimación final del paso actual, según la interpretación). Esta estimación preliminar también se denomina estimación a priori del estado, ya que para obtenerla no se utilizan observaciones del paso correspondiente. En la fase de corrección, la extrapolación a priori se complementa con mediciones actuales relevantes para corregir la estimación. La estimación ajustada también se denomina estimación de estado posterior, o simplemente estimación de vector de estado. Normalmente, estas dos fases se alternan: la extrapolación se realiza en función de los resultados de la corrección hasta la siguiente observación, y la corrección se realiza junto con las observaciones disponibles en el siguiente paso, etc. Sin embargo, es posible otro desarrollo de los eventos, si por algún motivo razón por la cual la observación resultó no estar disponible, entonces la etapa de corrección puede omitirse y extrapolarse a partir de la estimación no ajustada (extrapolación a priori). De manera similar, si las mediciones independientes están disponibles sólo en ciertos ciclos de trabajo, las correcciones aún son posibles (generalmente usando una matriz de observación diferente). h k ).

Etapa de extrapolación

Extrapolación (predicción) del vector de estado del sistema basada en la estimación del vector de estado y el vector de control aplicado del paso ( k−1 ) por paso k :
Matriz de covarianza para el vector de estado extrapolado:

Etapa de corrección

Desviación recibida en el paso. k observaciones de la observación esperada de la extrapolación:
Matriz de covarianza para el vector de desviación (vector de error):
La matriz de ganancia óptima de Kalman, formada a partir de las matrices de covarianza de la extrapolación existente del vector de estado y las mediciones obtenidas (a través de la matriz de covarianza del vector de desviación):
Corrección de la extrapolación del vector de estado obtenida anteriormente - obtención de una estimación del vector de estado del sistema:
Cálculo de la matriz de covarianza para estimar el vector de estado del sistema:

La expresión para la matriz de covarianza de la estimación del vector de estado del sistema es válida sólo cuando se utiliza el vector óptimo de coeficientes dado. En general, esta expresión tiene una forma más compleja.

Invariantes

Si el modelo es absolutamente preciso y está especificado con absoluta precisión. condiciones iniciales y luego los siguientes valores se conservan después de cualquier número de iteraciones del filtro; son invariantes:

Las expectativas matemáticas de estimaciones y extrapolaciones del vector de estado del sistema y de las matrices de error son vectores nulos:

¿Dónde está la expectativa matemática?

Las matrices de covarianza calculadas de extrapolaciones, estimaciones del estado del sistema y vectores de error coinciden con las matrices de covarianza verdaderas:

Ejemplo de construcción de filtro.

Imaginemos un carro colocado sobre rieles infinitamente largos sin fricción. Inicialmente está en reposo en la posición 0, pero bajo la influencia de factores aleatorios está sujeto a una aceleración aleatoria. Medimos la posición del carro cada ∆ t segundos, pero las medidas son inexactas. Queremos obtener estimaciones de la posición del carro y su velocidad. Apliquemos el filtro de Kalman a este problema y determinemos todas las matrices necesarias.

En este problema las matrices F , h , R Y q No dependamos del tiempo, omitiremos sus índices. Además, no controlamos el carro, por lo que la matriz de control B ausente.

Las coordenadas y la velocidad del carro se describen mediante un vector en espacio lineal estados

donde está la velocidad (la primera derivada de la coordenada con respecto al tiempo).

Supondremos que entre ( k−1)ésimo y k en el décimo ciclo el carro se mueve con aceleración constante ak, distribuido según la ley normal con expectativa matemática cero y desviación estándar σ un. Según la mecánica newtoniana, podemos escribir

.

Matriz de covarianza de efectos aleatorios.

(σ a- escalar).

En cada paso del trabajo, se mide la posición del carro. Supongamos que el error de medición vk tiene una distribución normal con expectativa matemática cero y desviación estándar σ z. Entonces

y la matriz de covarianza del ruido de observación tiene la forma

.

Posición inicial Los carros son conocidos con seguridad.

, .

Si la posición y la velocidad del carro se conocen sólo aproximadamente, entonces la matriz de dispersión se puede inicializar suficientemente un gran número l, de modo que el número exceda la varianza de las medidas de coordenadas

, .

En este caso, en los primeros ciclos de funcionamiento, el filtro utilizará los resultados de la medición con mayor peso que la información disponible a priori.

Derivar fórmulas

Matriz de covarianza de estimación de vectores de estado

Por definición de la matriz de covarianza PAG k|k

sustituir la expresión para estimar el vector de estado

y escribe la expresión para el vector de error.

y vectores de medida

sacamos el vector de error de medición v k

desde el vector de error de medición v k no está correlacionado con otros argumentos, obtenemos la expresión

de acuerdo con las propiedades de la covarianza vectorial esta expresión convertido a la forma

reemplazando la expresión de la matriz de covarianza de extrapolación del vector de estado con PAG k|k−1 y determinación de la matriz de covarianza del ruido de observación en R k, obtenemos

La expresión resultante es válida para una matriz de coeficientes arbitraria, pero si es una matriz de coeficientes óptima de Kalman, entonces esta expresión para la matriz de covarianza se puede simplificar.

Matriz de ganancia óptima

El filtro de Kalman minimiza la suma de los cuadrados de las expectativas matemáticas de los errores de estimación del vector de estado.

Vector de error de estimación del vector de estado

La tarea es minimizar la suma de las expectativas matemáticas de los cuadrados de los componentes de un vector dado.

filtro de kalman

El filtro de Kalman se utiliza ampliamente en aplicaciones econométricas y de ingeniería, desde sistemas de radar y visión hasta la estimación de parámetros de modelos macroeconómicos. El filtrado de Kalman es una parte importante de la teoría del control y juega un papel importante en la creación de sistemas de control. Junto con un controlador lineal-cuadrático, el filtro de Kalman le permite resolver el problema del control lineal-cuadrático gaussiano. El filtro de Kalman y el controlador cuadrático lineal son una posible solución a la mayoría de los problemas fundamentales de la teoría del control.

En la mayoría de las aplicaciones, la cantidad de parámetros que definen el estado de un objeto es mayor que la cantidad de parámetros observables disponibles para medición. Utilizando un modelo de un objeto basado en una serie de mediciones disponibles, el filtro de Kalman permite obtener una estimación del estado interno.

El filtro de Kalman está diseñado para estimar recursivamente el vector de estado de un sistema dinámico conocido a priori, es decir, para calcular el estado actual del sistema, es necesario conocer la medida actual, así como el estado anterior del propio filtro. . Por lo tanto, el filtro de Kalman, como muchos otros filtros recursivos, se implementa en una representación de tiempo, en lugar de frecuencia.

Un claro ejemplo de las capacidades del filtro es la obtención de estimaciones precisas y continuamente actualizadas de la posición y velocidad de algún objeto en función de los resultados de una serie temporal de mediciones inexactas de su ubicación. Por ejemplo, en el radar la tarea es rastrear un objetivo, determinar su ubicación, velocidad y aceleración, mientras que los resultados de las mediciones llegan gradualmente y son muy ruidosos. El filtro de Kalman utiliza un modelo probabilístico de la dinámica del objetivo que especifica el tipo de movimiento probable del objeto, lo que reduce el impacto del ruido y proporciona buenas estimaciones de la posición del objeto en el presente, futuro o pasado.

Introducción

El filtro de Kalman opera con el concepto de vector de estado del sistema (un conjunto de parámetros que describen el estado del sistema en un momento determinado) y su descripción estadística. En el caso general, la dinámica de un determinado vector de estado se describe mediante las densidades de probabilidad de la distribución de sus componentes en cada momento del tiempo. Si tiene un determinado modelo matemático de observaciones del sistema, así como un modelo de cambio a priori en los parámetros del vector de estado (es decir, como un proceso formativo de Markov), puede escribir una ecuación para la densidad de probabilidad posterior de el vector de estado en cualquier momento. Esta ecuación diferencial se llama ecuación de Stratonovich. La ecuación de Stratonovich no se puede resolver en su forma general. Sólo se puede obtener una solución analítica en el caso de una serie de restricciones (supuestos):

  • Gaussianidad de las densidades de probabilidad a priori y posterior del vector de estado en cualquier momento (incluido el inicial)
  • Gaussianidad del ruido de conformación.
  • Gaussianidad del ruido de observación.
  • blancura del ruido de observación
  • linealidad del modelo de observación
  • linealidad del modelo del proceso de formación (que, recordemos, debe ser un proceso de Markov)

El filtro de Kalman clásico es una ecuación para calcular el primer y segundo momento de la densidad de probabilidad posterior (en el sentido de un vector de expectativas matemáticas y una matriz de varianzas, incluidas las recíprocas) bajo restricciones dadas. Debido a que para la densidad de probabilidad normal la expectativa matemática y la matriz de dispersión definen completamente la densidad de probabilidad, podemos decir que el filtro de Kalman calcula la densidad de probabilidad posterior del vector de estado en cada momento. Esto significa que describe completamente el vector de estado como una cantidad vectorial aleatoria.

Los valores calculados de las expectativas matemáticas son estimaciones óptimas según el criterio del error cuadrático medio, que determina su uso generalizado.

Existen varios tipos de filtro de Kalman, que se diferencian en las aproximaciones y trucos que se deben utilizar para reducir el filtro a la forma descrita y reducir sus dimensiones:

  • Filtro de Kalman extendido (EKF). Reducción de modelos observacionales no lineales y el proceso de conformación mediante linealización mediante expansión de series de Taylor.
  • Filtro Kalman sin perfume (UKF). Se utiliza en problemas en los que la linealización simple conduce a la destrucción de conexiones útiles entre los componentes del vector de estado. En este caso, la "linealización" se basa en la transformación sin olor.
  • Filtro conjunto de Kalman (EnKF). Se utiliza para reducir la dimensión de un problema.
  • Las opciones son posibles con un filtro adicional no lineal, que permite reducir las observaciones no gaussianas a normales.
  • Son posibles opciones con un filtro "blanqueador", lo que le permite trabajar con ruido "coloreado"
  • etc.

Modelo de sistema dinámico utilizado.

Los filtros de Kalman se basan en sistemas dinámicos lineales muestreados en el tiempo. Estos sistemas se modelan mediante cadenas de Markov utilizando operadores lineales y términos con distribución normal. El estado del sistema se describe mediante un vector de dimensión finita: el vector de estado. En cada paso de tiempo, un operador lineal actúa sobre el vector de estado y lo transfiere a otro vector de estado (cambio determinista de estado), se suma un determinado vector de ruido normal (factores aleatorios) y, en el caso general, un vector de control que modela la influencia del sistema de control. El filtro de Kalman puede verse como análogo a los modelos ocultos de Markov, con la diferencia de que las variables que describen el estado del sistema son elementos de un conjunto infinito de números reales (a diferencia de un conjunto finito de espacio de estados en los modelos ocultos de Markov). Además, los modelos ocultos de Markov pueden utilizar distribuciones arbitrarias para valores de vectores de estado posteriores, a diferencia del filtro de Kalman, que utiliza un modelo de ruido distribuido normalmente. Existe una relación estricta entre el filtro de Kalman y las ecuaciones ocultas del modelo de Markov. Roweis y Chahramani (1999) ofrecen una revisión de estos y otros modelos.

Cuando se utiliza un filtro de Kalman para obtener estimaciones del vector de estado de un proceso a partir de una serie de mediciones ruidosas, es necesario presentar un modelo de este proceso de acuerdo con la estructura del filtro, en forma de una ecuación matricial de cierto tipo. Por cada latido k funcionamiento del filtro, es necesario determinar las matrices de acuerdo con la siguiente descripción: evolución del proceso F k; matriz de observación h k; matriz de covarianza del proceso q k; matriz de covarianza del ruido de medición R k; en presencia de acciones de control: una matriz de sus coeficientes B k .

Ilustración de cómo funciona el filtro. Las matrices están marcadas con cuadrados. Las elipses marcan matrices de distribuciones normales multivariadas (incluidas medias y covarianzas). Los vectores se dejan sin círculos. En el caso más simple, algunas matrices no cambian con el tiempo (no dependen del índice k), pero todavía son utilizados por el filtro en cada ciclo de operación.

El modelo de sistema/proceso supone que el verdadero estado en ese momento k se obtiene del estado verdadero en el momento k−1 según la ecuación:

,
  • F k- matriz de evolución proceso/sistema que afecta al vector incógnita k−1 (vector de estado en el momento k−1 );
  • B k- matriz de control, que se aplica al vector de acciones de control tu k ;
  • w k- proceso aleatorio normal con expectativa matemática cero y matriz de covarianza q k, que describe la naturaleza aleatoria de la evolución del sistema/proceso:

En este momento k Se realiza observación (medición). z k vector de estado verdadero incógnita k, que están relacionados entre sí por la ecuación:

Dónde h k- matriz de medición que conecta el vector de estado real y el vector de mediciones tomadas, v k- ruido blanco gaussiano de mediciones con expectativa matemática cero y matriz de covarianza R k :

Estado inicial y vectores. procesos aleatorios en cada latido ( incógnita 0 , w 1 , …, w k , v 1 , …, v k) se consideran independientes.

Este modelo no puede describir con precisión muchos sistemas dinámicos reales. En la práctica, la dinámica que no se tiene en cuenta en el modelo puede perjudicar gravemente el rendimiento del filtro, especialmente cuando se trabaja con una señal de entrada estocástica desconocida. Además, la dinámica que no se tiene en cuenta en el modelo puede hacer que el filtro sea inestable. Por otro lado, el ruido blanco independiente como señal no hará que el algoritmo diverja. El problema de separar el ruido medido de la dinámica que no se tiene en cuenta en el modelo es complejo y se resuelve utilizando la teoría de los sistemas de control robustos.

filtro de kalman

El filtro de Kalman es un tipo de filtro recursivo. Para calcular la evaluación del estado del sistema para el ciclo de operación actual, se necesita una evaluación del estado (en forma de evaluación del estado del sistema y una estimación del error al determinar este estado) en el ciclo anterior de operación y mediciones en el ciclo actual. Esta propiedad lo distingue de los filtros de paquetes, que requieren conocimiento del historial de mediciones y/o estimaciones durante el ciclo de operación actual. Además, por notación entenderemos la estimación del vector verdadero en este momento. norte teniendo en cuenta las medidas desde el inicio de la obra hasta metro inclusivo.

El estado del filtro está especificado por dos variables:

Las iteraciones del filtro de Kalman se dividen en dos fases: extrapolación y corrección. Durante la extrapolación, el filtro recibe una evaluación preliminar del estado del sistema (en la literatura rusa a menudo se denomina , donde significa "extrapolación", y k- número del ciclo de reloj en el que se recibió) para el paso actual basado en la evaluación final del estado del paso anterior (o una estimación preliminar para el siguiente ciclo de reloj basado en la evaluación final del paso actual, dependiendo de la interpretación). Esta estimación preliminar también se denomina estimación a priori del estado, ya que no se obtiene mediante observaciones del paso correspondiente. En la fase de corrección, la extrapolación a priori se complementa con mediciones actuales relevantes para corregir la estimación. La estimación ajustada también se denomina estimación de estado posterior, o simplemente estimación de vector de estado. Normalmente, estas dos fases se alternan: la extrapolación se realiza en función de los resultados de la corrección hasta la siguiente observación, y la corrección se realiza junto con las observaciones disponibles en el siguiente paso, etc. Sin embargo, es posible otro desarrollo de los eventos, si por algún motivo razón por la cual la observación resultó no estar disponible, entonces la etapa de corrección puede omitirse y extrapolarse a partir de la estimación no ajustada (extrapolación a priori). De manera similar, si las mediciones independientes están disponibles sólo en ciertos ciclos de trabajo, las correcciones aún son posibles (generalmente usando una matriz de observación diferente). h k ).

Etapa de extrapolación

Etapa de corrección

Desviación recibida en el paso. k observaciones de la observación esperada de la extrapolación:
Matriz de covarianza para el vector de desviación (vector de error):
La matriz de ganancia óptima de Kalman, formada a partir de las matrices de covarianza de la extrapolación existente del vector de estado y las mediciones obtenidas (a través de la matriz de covarianza del vector de desviación):
Corrección de la extrapolación del vector de estado obtenida anteriormente - obtención de una estimación del vector de estado del sistema:
Cálculo de la matriz de covarianza para estimar el vector de estado del sistema:

La expresión para la matriz de covarianza de la estimación del vector de estado del sistema es válida sólo cuando se utiliza el vector óptimo de coeficientes dado. En general, esta expresión tiene una forma más compleja.

Invariantes

Si el modelo es absolutamente preciso y las condiciones iniciales se especifican con absoluta exactitud, entonces los siguientes valores se conservan después de cualquier número de iteraciones del filtro; son invariantes:

Las expectativas matemáticas de estimaciones y extrapolaciones del vector de estado del sistema y de las matrices de error son vectores nulos:

¿Dónde está la expectativa matemática?

Las matrices de covarianza calculadas de extrapolaciones, estimaciones del estado del sistema y vectores de error coinciden con las matrices de covarianza verdaderas:

Ejemplo de construcción de filtro.

Imaginemos un carro colocado sobre rieles infinitamente largos en ausencia de fricción. Inicialmente está en reposo en la posición 0, pero bajo la influencia de factores aleatorios está sujeto a una aceleración aleatoria. Medimos la posición del carro cada ∆ t segundos, pero las medidas son inexactas. Queremos obtener estimaciones de la posición del carro y su velocidad. Apliquemos el filtro de Kalman a este problema y determinemos todas las matrices necesarias.

En este problema las matrices F , h , R Y q No dependamos del tiempo, omitiremos sus índices. Además, no controlamos el carro, por lo que la matriz de control B ausente.

Las coordenadas y la velocidad del carro se describen mediante un vector en el espacio de estados lineal.

donde está la velocidad (la primera derivada de la coordenada con respecto al tiempo).

Supondremos que entre ( k−1)ésimo y k en el décimo ciclo el carro se mueve con aceleración constante ak, distribuido según la ley normal con expectativa matemática cero y desviación estándar σ un. Según la mecánica newtoniana, podemos escribir

.

Matriz de covarianza de efectos aleatorios.

(σ a- escalar).

En cada paso del trabajo, se mide la posición del carro. Supongamos que el error de medición vk tiene una distribución normal con expectativa matemática cero y desviación estándar σ z. Entonces

y la matriz de covarianza del ruido de observación tiene la forma

.

Se conoce exactamente la posición inicial del carro.

, .

Si la posición y la velocidad del carro se conocen sólo aproximadamente, entonces la matriz de varianza se puede inicializar con un número suficientemente grande l, de modo que el número exceda la varianza de las medidas de coordenadas

, .

En este caso, en los primeros ciclos de funcionamiento, el filtro utilizará los resultados de la medición con mayor peso que la información disponible a priori.

Derivar fórmulas

Matriz de covarianza de estimación de vectores de estado

Por definición de la matriz de covarianza PAG k|k

sustituir la expresión para estimar el vector de estado

y escribe la expresión para el vector de error.

y vectores de medida

sacamos el vector de error de medición v k

desde el vector de error de medición v k no está correlacionado con otros argumentos, obtenemos la expresión

de acuerdo con las propiedades de la covarianza vectorial, esta expresión se transforma a la forma

reemplazando la expresión de la matriz de covarianza de extrapolación del vector de estado con PAG k|k−1 y determinación de la matriz de covarianza del ruido de observación en R k, obtenemos

La expresión resultante es válida para una matriz de coeficientes arbitraria, pero si es una matriz de coeficientes óptima de Kalman, entonces esta expresión para la matriz de covarianza se puede simplificar.

Matriz de ganancia óptima

El filtro de Kalman minimiza la suma de los cuadrados de las expectativas matemáticas de los errores de estimación del vector de estado.

Vector de error de estimación del vector de estado

La tarea es minimizar la suma de las expectativas matemáticas de los cuadrados de los componentes de un vector dado.

,

lo que equivale a minimizar la traza de la matriz de covarianza de la estimación del vector de estado PAG k|k. Sustituyamos las expresiones existentes en la expresión de la matriz de covarianza de la estimación del vector de estado y completémosla hasta un cuadrado completo:

Tenga en cuenta que el último término es la matriz de covarianza de alguna variable aleatoria, por lo que su traza no es negativa. El mínimo de seguimiento se logra cuando el último término se establece en cero:

Se afirma que matriz dada es el deseado y, cuando se utiliza como matriz de coeficientes en el filtro de Kalman, minimiza la suma de los errores cuadráticos medios en la estimación del vector de estado.

Matriz de covarianza de estimación de vectores de estado utilizando la matriz de coeficientes óptimos

Expresión para la matriz de covarianza de la estimación del vector de estado. PAG k|k cuando se utiliza la matriz de coeficientes óptimos tomará la forma:

Esta fórmula es computacionalmente más simple y, por lo tanto, casi siempre se usa en la práctica, pero es correcta solo cuando se usa la matriz de coeficientes óptima. Si debido a la baja precisión computacional surge un problema con la estabilidad computacional, o si se usa específicamente una matriz de coeficientes diferente a la óptima, se debe usar fórmula general para la matriz de covarianza de la estimación del vector de estado.

Críticas al filtro de Kalman

En momento presente La principal crítica al filtro de Kalman se lleva a cabo en las siguientes áreas

En Internet, incluido Habré, puede encontrar mucha información sobre el filtro Kalman. Pero es difícil encontrar una conclusión fácilmente digerible a las fórmulas mismas. Sin una conclusión, toda esta ciencia se percibe como una especie de chamanismo, las fórmulas parecen un conjunto de símbolos sin rostro y, lo más importante, muchas afirmaciones simples que se encuentran en la superficie de la teoría están más allá de la comprensión. El propósito de este artículo será hablar sobre este filtro en un idioma lo más accesible posible.
El filtro de Kalman es herramienta más poderosa filtrado de datos. Su principio fundamental es que el filtrado utiliza información sobre la física del fenómeno mismo. Digamos que si filtra los datos del velocímetro de un automóvil, entonces la inercia del automóvil le da derecho a percibir saltos de velocidad demasiado rápidos como un error de medición. El filtro de Kalman es interesante porque, en cierto sentido, es el más mejor filtro. A continuación analizaremos con más detalle qué significan exactamente las palabras "el mejor". Al final del artículo mostraré que en muchos casos las fórmulas se pueden simplificar hasta tal punto que casi no queda nada de ellas.

programa educativo

Antes de familiarizarse con el filtro de Kalman, sugiero recordar algunos definiciones simples y hechos de la teoría de la probabilidad.

variable aleatoria

Cuando dicen que se da una variable aleatoria, quieren decir que este valor puede tomar valores aleatorios. Toma diferentes valores con diferentes probabilidades. Cuando lanzas, digamos, un dado, aparecerá un conjunto discreto de valores: . Cuando estamos hablando de, por ejemplo, sobre la velocidad de una partícula errante, entonces, obviamente, tenemos que lidiar con conjunto continuo valores. Denotaremos los valores “eliminados” de una variable aleatoria mediante , pero en ocasiones usaremos la misma letra con la que denotamos variable aleatoria: .
En el caso de un conjunto continuo de valores, una variable aleatoria se caracteriza por una densidad de probabilidad, que nos dicta que la probabilidad de que una variable aleatoria "caiga" en una pequeña vecindad de un punto de longitud es igual a . Como podemos ver en la imagen, esta probabilidad es igual al área del rectángulo sombreado debajo del gráfico:

Muy a menudo en la vida, las variables aleatorias tienen una distribución gaussiana cuando la densidad de probabilidad es igual a .

Vemos que la función tiene forma de campana con centro en un punto y un ancho de orden característico.
Dado que estamos hablando de la distribución gaussiana, sería una pena no mencionar de dónde viene. Así como los números están firmemente establecidos en las matemáticas y se encuentran en los lugares más inesperados, la distribución gaussiana ha echado profundas raíces en la teoría de la probabilidad. Una afirmación notable que explica parcialmente la omnipresencia gaussiana es la siguiente:
Sea una variable aleatoria con una distribución arbitraria (de hecho, existen algunas restricciones a esta arbitrariedad, pero no son nada estrictas). Realicemos experimentos y calculemos la suma de los valores "eliminados" de una variable aleatoria. Hagamos muchos experimentos de este tipo. Está claro que cada vez recibiremos un valor diferente del importe. En otras palabras, esta cantidad es en sí misma una variable aleatoria con su propia ley de distribución específica. Resulta que cuando es lo suficientemente grande, la ley de distribución de esta suma tiende a la distribución gaussiana (por cierto, el ancho característico de la "campana" crece a medida que ). Leemos con más detalle en Wikipedia: teorema del límite central. En la vida hay muy a menudo cantidades que consisten en gran cantidad variables aleatorias independientes distribuidas idénticamente y, por tanto, distribuidas gaussianamente.

Valor medio

El valor promedio de una variable aleatoria es lo que obtendremos en el límite si realizamos muchos experimentos y calculamos la media aritmética de los valores eliminados. El valor medio se denota de diferentes maneras: a los matemáticos les gusta denotarlo mediante (expectativa matemática) y a los matemáticos extranjeros mediante (expectativa). Físicos a través de o. Lo designaremos de forma extranjera: .
Por ejemplo, para una distribución gaussiana, la media es.

Dispersión

En el caso de la distribución gaussiana, vemos claramente que la variable aleatoria prefiere caer en una determinada vecindad de su valor medio. Como puede verse en el gráfico, la dispersión característica de valores es del orden de . ¿Cómo podemos estimar esta dispersión de valores para una variable aleatoria arbitraria si conocemos su distribución? Puede dibujar una gráfica de su densidad de probabilidad y estimar el ancho característico a simple vista. Pero preferimos seguir la ruta algebraica. se puede encontrar longitud promedio desviaciones (módulo) del valor medio: . Este valor será una buena estimación de la dispersión característica de los valores. Pero usted y yo sabemos muy bien que usar módulos en fórmulas es un dolor de cabeza, por lo que esta fórmula rara vez se usa para estimar la dispersión característica.
Una forma más sencilla (simple en términos de cálculos) es encontrar . Esta cantidad se llama dispersión y a menudo se denota como . La raíz de la varianza se llama desviación estándar. Desviación estándar - buena calificación dispersión de una variable aleatoria.
Por ejemplo, para la distribución gaussiana, podemos calcular que la varianza definida anteriormente es exactamente igual a , lo que significa que la desviación estándar es igual a , lo que concuerda muy bien con nuestra intuición geométrica.
De hecho, aquí se esconde una pequeña estafa. El hecho es que en la definición de la distribución gaussiana, debajo del exponente hay una expresión. Este dos está en el denominador precisamente para que la desviación estándar sea igual al coeficiente. Es decir, la fórmula de distribución gaussiana en sí está escrita en una forma especialmente diseñada para que calculemos su desviación estándar.

Variables aleatorias independientes

Las variables aleatorias pueden ser dependientes o no. Imagínese arrojar una aguja a un avión y registrar las coordenadas de ambos extremos. Estas dos coordenadas son dependientes; están relacionadas por la condición de que la distancia entre ellas sea siempre igual a la longitud de la aguja, aunque son variables aleatorias.
Las variables aleatorias son independientes si el resultado de la primera es completamente independiente del resultado de la segunda. Si las variables aleatorias son independientes, entonces el valor promedio de su producto es igual al producto de sus valores promedio:

Prueba

Por ejemplo, tener ojos azules y graduarse de la escuela con una medalla de oro son variables aleatorias independientes. Si, por ejemplo, medallistas de oro de ojos azules, entonces medallistas de ojos azules. Este ejemplo nos dice que si las variables aleatorias están dadas por sus densidades de probabilidad y , entonces la independencia de estos valores se expresa en el hecho de que la densidad de probabilidad (. el primer valor se eliminó y el segundo) se encuentra mediante la fórmula:

De esto se desprende inmediatamente que:

Como puede ver, la prueba se realizó para variables aleatorias que tienen un espectro continuo de valores y están especificadas por su densidad de probabilidad. En otros casos, la idea de prueba es similar.

Declaración del problema

Denotemos el valor que mediremos y luego filtraremos. Esto podría ser posición, velocidad, aceleración, humedad, grado de hedor, temperatura, presión, etc.
Empecemos con ejemplo sencillo, lo que nos llevará a la formulación tarea común. Imaginemos que tenemos un coche radiocontrolado que sólo puede ir hacia adelante y hacia atrás. Nosotros, conociendo el peso del coche, la forma, la superficie de la carretera, etc., calculamos cómo el joystick de control afecta la velocidad de movimiento.


Entonces las coordenadas del coche cambiarán según la ley:

En la vida real, no podemos tener en cuenta en nuestros cálculos las pequeñas perturbaciones que actúan sobre el coche (viento, baches, guijarros en la carretera), por lo que la velocidad real del coche diferirá de la calculada. Se agregará una variable aleatoria al lado derecho de la ecuación escrita:

Tenemos un sensor GPS instalado en el automóvil, que intenta medir las coordenadas reales del automóvil y, por supuesto, no puede medirlas con precisión, pero las mide con un error, que también es una variable aleatoria. Como resultado, recibimos datos erróneos del sensor:

La tarea es que, conociendo las lecturas incorrectas de los sensores, encuentre una buena aproximación a la verdadera coordenada del coche.
En la formulación del problema general cualquier cosa puede ser responsable de la coordenada (temperatura, humedad...), y al responsable de controlar el sistema desde el exterior lo denominaremos (en el ejemplo de la máquina). Las ecuaciones para las coordenadas y lecturas de los sensores se verán así:

(1)

Analicemos en detalle lo que sabemos:

Vale la pena señalar que la tarea de filtrado no es una tarea de suavizado. No estamos tratando de suavizar los datos del sensor, estamos tratando de obtener el valor más cercano a la coordenada real.

algoritmo de Kalman

Argumentaremos por inducción. Imaginemos que en el paso 1 ya hemos encontrado un valor filtrado del sensor que se aproxima mucho a la verdadera coordenada del sistema. No olvidemos que conocemos la ecuación que controla el cambio de la coordenada desconocida:

por lo tanto, sin recibir aún el valor del sensor, podemos suponer que en el paso el sistema evoluciona según esta ley y el sensor mostrará algo cercano a . Lamentablemente, todavía no podemos decir nada más preciso. Por otro lado, durante el paso tendremos en nuestras manos una lectura inexacta del sensor.
La idea de Kalman es la siguiente. Para obtener la mejor aproximación a la coordenada verdadera, debemos elegir media dorada entre la lectura de un sensor inexacto y nuestra predicción de lo que esperábamos que viera. Le daremos un peso a la lectura del sensor y quedará un peso sobre el valor previsto:

El coeficiente se llama coeficiente de Kalman. Depende del paso de iteración, por lo que sería más correcto escribir , pero por ahora, para no saturar las fórmulas de cálculo, omitiremos su índice.
Debemos elegir el coeficiente de Kalman tal que el resultado valor optimo Las coordenadas serían las más cercanas a la verdadera. Por ejemplo, si sabemos que nuestro sensor es muy preciso, entonces confiaremos más en su lectura y le daremos más peso al valor (cercano a uno). Si el sensor, por el contrario, no es del todo preciso, entonces nos centraremos más en el valor predicho teóricamente.
En general, para encontrar valor exacto Coeficiente de Kalman, solo necesitas minimizar el error:

Usamos las ecuaciones (1) (las que están en fondo azul en el cuadro) para reescribir la expresión de error:

Prueba

Ahora es el momento de discutir ¿qué significa la expresión minimizar el error? Después de todo, el error, como vemos, es en sí mismo una variable aleatoria y cada vez toma diferentes significados. Realmente no existe un enfoque único para definir lo que significa tener un error mínimo. Al igual que en el caso de la dispersión de una variable aleatoria, cuando intentamos estimar el ancho característico de su dispersión, aquí elegiremos el criterio de cálculo más simple. Minimizaremos la media del error al cuadrado:

Anotamos la última expresión:

Prueba

Del hecho de que todas las variables aleatorias incluidas en la expresión for son independientes, se deduce que todos los términos "cruzados" son iguales a cero:

Usamos el hecho de que , entonces la fórmula para la varianza parece mucho más simple: .

Esta expresión toma valor mínimo, cuando (igualamos la derivada a cero):

Aquí ya estamos escribiendo una expresión para el coeficiente de Kalman con el índice de paso, con lo que enfatizamos que depende del paso de iteración.
Sustituimos el valor óptimo resultante en la expresión de , que minimizamos. Obtenemos;

Nuestro problema está resuelto. Hemos obtenido una fórmula iterativa para calcular el coeficiente de Kalman.
Resumamos nuestros conocimientos adquiridos en un marco:


Ejemplo

código matlab

Borrar todo; N=100% número de muestras a=0,1% aceleración sigmaPsi=1 sigmaEta=50; k=1:N x=k x(1)=0 z(1)=x(1)+normrnd(0,sigmaEta); para t=1:(N-1) x(t+1)=x(t)+a*t+normrnd(0,sigmaPsi);

z(t+1)=x(t+1)+normrnd(0,sigmaEta); fin; Filtro %kalman xOpt(1)=z(1); eOpt(1)=sigmaEta; para t=1:(N-1) eOpt(t+1)=sqrt((sigmaEta^2)*(eOpt(t)^2+sigmaPsi^2)/(sigmaEta^2+eOpt(t)^2+ sigmaPsi^2)) K(t+1)=(eOpt(t+1))^2/sigmaEta^2 xOpt(t+1)=(xOpt(t)+a*t)*(1-K(t +1))+K(t+1)*z(t+1) final; trazar(k,xOpt,k,z,k,x)

Análisis Si rastreamos cómo cambia el coeficiente de Kalman con los pasos de iteración, podemos demostrar que siempre se estabiliza en un cierto valor


. Por ejemplo, cuando los errores cuadráticos medios del sensor y el modelo tienen una proporción de diez a uno, entonces la gráfica del coeficiente de Kalman dependiendo del paso de iteración se ve así:

En el siguiente ejemplo, analizaremos cómo esto puede hacernos la vida mucho más fácil.

Segundo ejemplo En la práctica, sucede a menudo que no sabemos nada sobre modelo fisico

lo que filtramos. Por ejemplo, querías filtrar las lecturas de tu acelerómetro favorito. No se sabe de antemano con qué ley pretende girar el acelerómetro. La mayor información que puede obtener es la variación del error del sensor. En una situación tan difícil, todo desconocimiento del modelo de movimiento puede derivar en una variable aleatoria: Pero, francamente, tal sistema ya no satisface en absoluto las condiciones que le impusimos a la variable aleatoria, porque ahora toda la física del movimiento desconocida para nosotros está oculta allí y, por lo tanto, no podemos decir eso en tiempo, los errores del modelo son independientes entre sí y que sus valores promedio son cero. En este caso, en general, la teoría del filtro de Kalman no es aplicable. Pero no prestaremos atención a este hecho, sino que aplicaremos estúpidamente todo el coloso de fórmulas, seleccionando los coeficientes a ojo, para que los datos filtrados se vean bien. Siempre podemos considerar este coeficiente como una constante y seleccionar solo esto. constante. Esta suposición no estropeará casi nada. En primer lugar, ya estamos utilizando ilegalmente la teoría de Kalman y, en segundo lugar, el coeficiente de Kalman se estabiliza rápidamente hasta convertirse en una constante. Al final todo será mucho más sencillo. No necesitamos ninguna fórmula de la teoría de Kalman, solo necesitamos seleccionar un valor aceptable e insertarlo en la fórmula iterativa:

El siguiente gráfico muestra filtrado por dos de diferentes maneras datos de un sensor ficticio. Siempre que no sepamos nada sobre la física del fenómeno. El primer método es honesto, con todas las fórmulas de la teoría de Kalman. Y el segundo es simplificado, sin fórmulas.


Como podemos ver, los métodos casi no son diferentes. Sólo se observa una pequeña diferencia al principio, cuando el coeficiente de Kalman aún no se ha estabilizado.

Discusión

Como hemos visto, la idea principal del filtro de Kalman es encontrar dicho coeficiente que, a su vez, función lineal de la lectura del sensor y el valor filtrado anterior. Y así sucesivamente hasta dar la vuelta completa a la cadena. Es decir, el valor filtrado depende de todos lecturas anteriores del sensor linealmente:

Por tanto, el filtro de Kalman se denomina filtro lineal.
Se puede demostrar que de todos los filtros lineales, el filtro de Kalman es el mejor. Lo mejor en el sentido de que el error cuadrático medio del filtro es mínimo.

Caso multidimensional

Toda la teoría del filtro de Kalman se puede generalizar al caso multidimensional. Las fórmulas allí parecen un poco más aterradoras, pero la idea de derivarlas es la misma que en el caso unidimensional. Puedes verlos en este maravilloso artículo: http://habrahabr.ru/post/140274/.
Y en este maravilloso video Se da un ejemplo de cómo usarlos.

Random Forest es uno de mis algoritmos favoritos minería de datos. En primer lugar, es increíblemente versátil y puede utilizarse para resolver problemas tanto de regresión como de clasificación; Busque anomalías y seleccione predictores. En segundo lugar, este es un algoritmo que es realmente difícil de aplicar incorrectamente. Simplemente porque, a diferencia de otros algoritmos, tiene pocos parámetros personalizables. Y también es sorprendentemente simple en esencia. Y al mismo tiempo, es sorprendentemente preciso.

¿Cuál es la idea detrás de un algoritmo tan maravilloso? La idea es simple: digamos que tenemos un algoritmo muy débil, por ejemplo. si hacemos mucho diferentes modelos Al utilizar este algoritmo débil y promediar el resultado de sus predicciones, el resultado final será significativamente mejor. Esto es lo que se llama aprendizaje conjunto en acción. Es por eso que el algoritmo Random Forest se llama "Random Forest" para los datos recibidos, crea muchos árboles de decisión y luego promedia el resultado de sus predicciones; Un punto importante Hay un elemento de azar en la creación de cada árbol. Después de todo, está claro que si creamos muchos árboles idénticos, el resultado de su promedio tendrá la precisión de un árbol.

¿Cómo funciona? Supongamos que tenemos algunos datos de entrada. Cada columna corresponde a algún parámetro, cada fila corresponde a algún elemento de datos.

Podemos seleccionar aleatoriamente una cierta cantidad de columnas y filas de todo el conjunto de datos y construir un árbol de decisiones basado en ellas.


jueves, 10 de mayo de 2012

jueves, 12 de enero de 2012


Eso es todo. El vuelo de 17 horas ha terminado, Rusia permanece en el extranjero. Y a través de la ventana de un acogedor apartamento de 2 dormitorios, nos mira San Francisco, el famoso Silicon Valley, California, Estados Unidos. Sí, esta es la razón por la que prácticamente no escribí. últimamente. Nos hemos mudado.

Todo esto comenzó en abril de 2011, cuando tuve una entrevista telefónica con Zynga. Entonces todo me pareció una especie de juego ajeno a la realidad y ni siquiera podía imaginar a qué conduciría. En junio de 2011, Zynga vino a Moscú y realizó una serie de entrevistas, se consideraron unos 60 candidatos que pasaron una entrevista telefónica y entre ellos se seleccionaron unas 15 personas (no sé el número exacto, algunos luego cambiaron de opinión, otros inmediatamente rechazado). La entrevista resultó sorprendentemente sencilla. Sin problemas de programación, sin preguntas difíciles sobre la forma de las escotillas, principalmente probando tu capacidad para chatear. Y el conocimiento, en mi opinión, se evaluó sólo de forma superficial.

Y entonces empezó el galimatías. Primero esperamos los resultados, luego la oferta, luego la aprobación de la LCA, luego la aprobación de la petición de visa, luego los documentos de EE. UU., luego la cola en la embajada, luego cheque adicional, luego una visa. Por momentos me pareció que estaba dispuesto a dejarlo todo y marcar. A veces dudé de que necesitáramos a Estados Unidos, después de todo, Rusia tampoco es mala. Todo el proceso duró unos seis meses y al final, a mediados de diciembre, recibimos las visas y comenzamos a prepararnos para la partida.

El lunes fue mi primer día de trabajo en un lugar nuevo. La oficina tiene todas las condiciones no sólo para trabajar, sino también para vivir. Desayunos, comidas y cenas de la mano de nuestros propios chefs, mucha comida variada repleta en cada rincón, gimnasio, masajes y hasta peluquería. Todo esto es completamente gratuito para los empleados. Mucha gente va al trabajo en bicicleta y hay varias salas equipadas para guardar vehículos. En general, nunca había visto algo así en Rusia. Sin embargo, todo tiene su precio; enseguida nos advirtieron que tendríamos que trabajar mucho. Lo que es “mucho”, según sus estándares, no lo tengo muy claro.

Espero, sin embargo, que a pesar de la cantidad de trabajo, en un futuro previsible pueda volver a escribir blogs y, tal vez, contar algo sobre la vida estadounidense y el trabajo como programador en Estados Unidos. Espera y verás. Mientras tanto, les deseo a todos un Feliz Año Nuevo y Navidad y ¡nos vemos de nuevo!


Como ejemplo de uso, imprimamos el rendimiento por dividendo. empresas rusas. Como precio base, tomamos el precio de cierre de la acción el día en que se cierra el registro. Por alguna razón, esta información no está disponible en el sitio web de la Troika, pero es mucho más interesante que los valores absolutos de los dividendos.
¡Atención! El código tarda bastante en ejecutarse, porque... Para cada promoción es necesario realizar una solicitud para financiar los servidores y obtener su valor.

Resultado<- NULL for(i in (1:length(divs[,1]))){ d <- divs if (d$Divs>0)( intentar(( comillas<- getSymbols(d$Symbol, src="Finam", from="2010-01-01", auto.assign=FALSE) if (!is.nan(quotes)){ price <- Cl(quotes) if (length(price)>0)(día<- d$Divs result <- rbind(result, data.frame(d$Symbol, d$Name, d$RegistryDate, as.numeric(dd)/as.numeric(price), stringsAsFactors=FALSE)) } } }, silent=TRUE) } } colnames(result) <- c("Symbol", "Name", "RegistryDate", "Divs") result


Del mismo modo, puede crear estadísticas de años anteriores.

El filtro de Kalman es probablemente el algoritmo de filtrado más popular utilizado en muchos campos de la ciencia y la tecnología. Por su sencillez y eficacia se puede encontrar en receptores GPS, procesadores de datos de sensores, en la implementación de sistemas de control, etc.

Hay muchos artículos y libros en Internet sobre el filtro de Kalman (principalmente en inglés), pero estos artículos tienen una barrera de entrada bastante alta y quedan muchos lugares vagos, aunque en realidad es un algoritmo muy claro y transparente; . Intentaré hablar de ello en un lenguaje sencillo, con un aumento gradual de la complejidad.

¿Para qué es?

Cualquier dispositivo de medición tiene algún error; puede verse influenciado por una gran cantidad de influencias externas e internas, lo que lleva al hecho de que la información que contiene es ruidosa. Cuanto más ruidosos sean los datos, más difícil será procesar dicha información.

Un filtro es un algoritmo de procesamiento de datos que elimina el ruido y la información innecesaria. En el filtro de Kalman, es posible especificar información a priori sobre la naturaleza del sistema, la relación de las variables y, en base a esto, construir una estimación más precisa, pero incluso en el caso más simple (sin ingresar información a priori) da excelentes resultados.

Consideremos un ejemplo simple: supongamos que necesitamos controlar el nivel de combustible en el tanque. Para hacer esto, se instala un sensor capacitivo en el tanque; es muy fácil de mantener, pero tiene algunas desventajas, por ejemplo, la dependencia del combustible que se llena (la constante dieléctrica del combustible depende de muchos factores, por ejemplo, la temperatura); ), y la gran influencia del “embotellamiento” en el tanque. Como resultado, la información que contiene representa una típica "sierra" con una amplitud decente. Estos tipos de sensores suelen instalarse en equipos de minería pesados ​​(no se deje confundir por el volumen del tanque):

filtro de kalman

Hagamos una pequeña digresión y familiaricémonos con el algoritmo en sí. El filtro de Kalman utiliza un modelo dinámico del sistema (por ejemplo, una ley física de movimiento), entradas de control conocidas y múltiples mediciones secuenciales para formar una estimación de estado óptima. El algoritmo consta de dos fases repetidas: predicción y ajuste. En la primera etapa, se calcula la predicción del estado en el siguiente momento (teniendo en cuenta la inexactitud de su medición). En el segundo, la nueva información del sensor corrige el valor predicho (teniendo en cuenta también la inexactitud y el ruido de esta información):

Las ecuaciones se presentan en forma matricial; si no sabes álgebra lineal, está bien, lo que sigue es una versión simplificada sin matrices para el caso con una variable. En el caso de una variable, las matrices degeneran en valores escalares.

Primero comprendamos la notación: el subíndice denota un momento en el tiempo: k - actual, (k-1) - anterior, el signo menos en el superíndice indica que este previsto valor intermedio.

Las descripciones de las variables se presentan en las siguientes imágenes:

Es posible describir durante mucho tiempo y de manera tediosa lo que significan todas estas misteriosas matrices de transición, pero, en mi opinión, es mejor intentar aplicar el algoritmo en un ejemplo real, para que los significados abstractos adquieran un significado real.

Probemoslo en acción

Volvamos al ejemplo con el sensor de nivel de combustible, dado que el estado del sistema está representado por una variable (el volumen de combustible en el tanque), las matrices degeneran en ecuaciones ordinarias:

Definición de un modelo de proceso
Para aplicar el filtro es necesario determinar las matrices/valores de las variables que determinan la dinámica del sistema y las dimensiones F, B y H:

F- una variable que describe la dinámica del sistema, en el caso del combustible - puede ser un coeficiente que determina el consumo de combustible en ralentí durante el tiempo de muestreo (el tiempo entre pasos del algoritmo). Sin embargo, además del consumo de combustible, también hay gasolineras... así que por simplicidad pondremos esta variable en 1 (es decir, indicamos que el valor previsto será igual al estado anterior).

B- variable que determina la aplicación de la acción de control. Si tuviéramos información adicional sobre la velocidad del motor o el grado de presión sobre el pedal del acelerador, entonces este parámetro determinaría cómo cambiaría el consumo de combustible durante el período de muestreo. Como no hay acciones de control en nuestro modelo (no hay información sobre ellas), aceptamos B = 0.

h- una matriz que define la relación entre las mediciones y el estado del sistema, por ahora, sin explicación, aceptaremos esta variable también igual a 1;

Definición de propiedades de suavizado
R- El error de medición se puede determinar probando instrumentos de medición y determinando el error de su medición.

q- determinar el ruido del proceso es una tarea más difícil, ya que es necesario determinar la variación del proceso, lo cual no siempre es posible. En cualquier caso, puede seleccionar este parámetro para proporcionar el nivel de filtración requerido.

Implementémoslo en código.
Para disipar la confusión restante, implementemos un algoritmo simplificado en C# (sin matrices ni acciones de control):

clase KalmanFilterSimple1D
{
público doble X0 (obtener; conjunto privado;) // estado previsto
público doble P0 ( get; conjunto privado; ) // covarianza predicha

Público doble F ( get; conjunto privado; ) // factor del valor real al valor real anterior
público doble Q ( get; conjunto privado; ) // medición de ruido
público doble H ( get; conjunto privado; ) // factor del valor medido al valor real
público doble R ( get; conjunto privado; ) // ruido ambiental

Doble Estado público ( get; set privado; )
Covarianza doble pública ( get; conjunto privado; )

Público KalmanFilterSimple1D (doble q, doble r, doble f = 1, doble h = 1)
{
Q = q;
R = r;
F = f;
H = h;
}

SetState público vacío (doble estado, doble covarianza)
{
Estado = estado;
Covarianza = covarianza;
}

Vacío público Correcto (dato doble)
{
//actualización de tiempo - predicción
X0 = F*Estado;
P0 = F*Covarianza*F + Q;

//actualización de medidas - corrección
var K = H*P0/(H*P0*H + R);
Estado = X0 + K*(datos - H*X0);
Covarianza = (1 - K*H)*F;
}
}

// Solicitud...

Var combustibleData = GetData();
var filtrado = nueva Lista();

Var kalman = nuevo KalmanFilterSimple1D(f: 1, h: 1, q: 2, r: 15); // establece F, H, Q y R
kalman.SetState(fuelData, 0.1); // Establece los valores iniciales de Estado y Covarianza
foreach(var d en fuelData)
{
kalman.Correcto(d); // Aplicar el algoritmo

Filtrado.Agregar(kalman.Estado); //Guardar el estado actual
}

El resultado del filtrado con estos parámetros se muestra en la figura (para ajustar el grado de suavizado, puede cambiar los parámetros Q y R):

La parte más interesante queda fuera del alcance del artículo: aplicar el filtro de Kalman para varias variables, especificar la relación entre ellas y generar automáticamente valores para variables no observadas. Intentaré continuar con el tema en cuanto tenga tiempo.

Espero que la descripción no haya sido demasiado tediosa y complicada, si tienes alguna duda o aclaración bienvenido a los comentarios)




Arriba