1

我正在尝试使用卡尔曼滤波器来估计参数,使用 PyKalman,我遇到了转换矩阵估计的问题。它总是返回 1.0。看这个简单的例子:

from pykalman import KalmanFilter

N = 1000
a = 0.05
sims = []

v = 1

for t in range(N):
    v *= a
    sims.append(v)

kf = KalmanFilter(n_dim_obs=1, n_dim_state=1,
                  em_vars=['transition_matrices'],
                  initial_state_mean=[1],
                  transition_covariance=[0.0],
                  transition_offsets=[0],
                  initial_state_covariance=[0.0],
                  observation_matrices=[1],
                  observation_covariance=[0],
                  observation_offsets=[0])

emres = kf.em(sims, n_iter=10)

print "alpha: {}".format(emres.transition_matrices[0, 0])


>>> alpha: 1.0

观察结果与潜在状态变量相同,如观察矩阵所示,噪声协方差均为 0。同样,状态变量每次迭代都简单地乘以 alpha,但模型适合 alpha 的 1.0。这里会发生什么?我能够在其他示例中拟合协方差,只有转换矩阵无法拟合。

4

0 回答 0