【发布时间】:2017-06-06 21:19:58
【问题描述】:
拥有一维测量数据,我想知道使用卡尔曼滤波器在每个点的状态标准偏差。我的程序如下:
from pykalman import KalmanFilter
import numpy as np
measurements = np.asarray([2, 1, 3, 6, 3, 2, 7, 3, 4, 4, 5, 1, 10, 3, 1, 5])
kf = KalmanFilter(transition_matrices=[1],
observation_matrices=[1],
initial_state_mean=measurements[0],
initial_state_covariance=1,
observation_covariance=1,
transition_covariance=0.01)
state_means, state_covariances = kf.filter(measurements)
state_std = np.sqrt(state_covariances[:,0])
print state_std
这会导致以下奇怪的结果:
[[ 0.70710678]
[ 0.5811612 ]
[ 0.50795838]
[ 0.4597499 ]
[ 0.42573145]
[ 0.40067908]
[ 0.38170166]
[ 0.36704314]
[ 0.35556214]
[ 0.34647811]
[ 0.33923608]
[ 0.33342945]
[ 0.32875331]
[ 0.32497478]
[ 0.32191347]
[ 0.31942809]]
我预计最后一个数据点的方差会增加。我做错了什么?
【问题讨论】:
-
如果没有 state_means,方差就毫无意义。每个时间步的它们是什么?
-
状态均值计算正确(取决于转移协方差)。但我不知道从哪里得到正确的方差值和标准差。
-
是什么让您认为方差计算不正确?
-
标准偏差的值,正如我计算的那样,具有渐近特征,尽管测量值在接近尾声时增加了波动性。所以我希望和卡尔曼一起看。我认为我没有正确读取状态协方差矩阵
-
我猜你需要分叉包并使用
predicted_state_covariances。 github.com/pykalman/pykalman/blob/master/pykalman/…