Посмотрим:
transition_matrices = [[1, 1], [0, 1]]
означает
Итак, ваш вектор состояния состоит из 2 элементов, например:
observation_matrices = [[0.1, 0.5], [-0.3, 0.0]]
означает
Размер матрицы наблюдения должен составлять [n_dim_obs, n_dim_state]
.
Таким образом, ваш вектор измерений также состоит из 2 элементов.
Вывод: код имеет 3 observations of two variables measured at 3 different points in time
.
Вы можете изменить данный код, чтобы он мог обрабатывать каждое измерение с шагом по времени. Вы используете kf.filter_update()
для каждого измерения вместо kf.filter()
для всех измерений одновременно:
from pykalman import KalmanFilter
import numpy as np
kf = 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
kf = kf.em(measurements, n_iter=5)
filtered_state_means = kf.initial_state_mean
filtered_state_covariances = kf.initial_state_covariance
for m in measurements:
filtered_state_means, filtered_state_covariances = (
kf.filter_update(
filtered_state_means,
filtered_state_covariances,
observation = m)
)
print(filtered_state_means);
Выход:
[-1.69112511 0.30509999]
Результат немного отличается, как при использовании kf.filter()
, потому что эта функция не выполняет прогнозирование при первом измерении, но я думаю, что должно.