我正在尝试使用卡尔曼滤波器来估计参数,使用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.同样,状态变量在每次迭代时都被α简化为α,但模型对于α适合1.0。这可能会发生什么?我能够在其他示例中拟合协方差,只有转换矩阵不适合。