Как запустить фильтр Калмана pykalman для одного наблюдения? (питон)

Я могу запустить простой пример фильтра Калмана pykalman, приведенный в документации pykalman:

import pykalman
import numpy as np
kf = pykalman.KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0], [0,0], [0,1]])  # 3 observations
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
print filtered_state_means

Это правильно возвращает оценки состояния (по одной для каждого наблюдения):

[[ 0.07285974  0.39708561]
 [ 0.30309693  0.2328318 ]
 [-0.5533711  -0.0415223 ]]

Однако, если я предоставлю только одно наблюдение, код завершится ошибкой:

import pykalman
import numpy as np
kf = pykalman.KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0]])  # 1 observation
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
print filtered_state_means

со следующей ошибкой:

ValueError: could not broadcast input array from shape (2,2) into shape (2,1)

Как я могу использовать pykalman для обновления начального состояния и начальной ковариации, используя всего одно наблюдение?


person chutney    schedule 21.11.2014    source источник
comment
Я подозреваю, что в коде есть какой-то особый случай для обнаружения одного ввода по сравнению с массивом входов, и ваш код не совсем правильно форматирует один ввод. Поскольку никто не ответил, единственное решение, вероятно, состоит в том, чтобы прочитать источник и посмотреть, что он делает.   -  person Ben Jackson    schedule 24.11.2014


Ответы (2)


Из документации по адресу: http://pykalman.github.io/#kalmanfilter.

filter_update(filtered_state_mean, filtered_state_covariance, observation=None, transition_matrix=None, transition_offset=None, transition_covariance=None, observation_matrix=None, observation_offset=None, observation_covariance=None)

Он принимает filtered_state_mean и filtered_state_covariance в момент времени t, а также наблюдение в момент времени t+1 и возвращает среднее значение состояния и ковариацию состояния в момент времени t+1 (для использования при следующем обновлении).

person Sturzl    schedule 08.09.2015

Если я правильно понимаю алгоритм фильтра Калмана, вы можете предсказать состояние, используя всего одно наблюдение. Но усиление и ковариация будут далекими, и прогноз будет далек от фактического состояния. Вам нужно дать фильтру Калмана несколько наблюдений в качестве тренировочного набора, чтобы достичь устойчивого состояния.

person Amar    schedule 23.06.2017