Python PyKalman EM在平凡的模拟中不起作用
我正在尝试使用卡尔曼滤波器来估计参数,使用PyKalman,我对转移矩阵估计有问题。它总是返回1.0。请看这个简单的例子:Python PyKalman EM在平凡的模拟中不起作用,python,kalman-filter,pykalman,Python,Kalman Filter,Pykalman,我正在尝试使用卡尔曼滤波器来估计参数,使用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_
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。这到底是怎么回事?在其他示例中,我能够拟合协方差,只有转换矩阵无法拟合。查看代码,它看起来像是先过滤然后平滑数据,因此它将使用您给定的任何转换矩阵(如果未指定,则为1,如本例所示)。然后将EM算法应用于平滑数据。然后EM算法必须适合此转换矩阵,因为您的数据使用默认的转换矩阵。代码似乎不正确。因此,估计此参数需要一定量的噪波,现在开始工作。查看代码,它似乎首先过滤然后平滑数据,因此它将使用您给定的任何转换矩阵(如果未指定,则为1,如本例所示)。然后将EM算法应用于平滑数据。然后EM算法必须适合此转换矩阵,因为您的数据使用默认的转换矩阵。代码似乎不正确。因此,估计此参数需要一定量的噪声,目前正在工作。