我是卡尔曼滤波器的新手,并试图用它来预测缺失值以及从 GPS 数据(纬度和经度)中获得平滑的观察结果。
我正在使用 pykalman,我的代码块如下所示:
data = data[['Lat', 'Lon']]
measurements = np.asarray(data, dtype='float')
measurements_masked = np.ma.masked_invalid(measurements)
# initial state of the form [x0, x0_dot, x1, x1_dot]
initial_state_mean = [
measurements[0, 0],
0,
measurements[0, 1],
0
]
initial_state_covariance = [[ 10, 0, 0, 0],
[ 0, 1, 0, 0],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]]
# transition matrix to estimate new position given old position
transition_matrix = [
[1, 1, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 1],
[0, 0, 0, 1]
]
observation_matrix = [
[1, 0, 0, 0],
[0, 0, 1, 0]
]
kf = KalmanFilter(
transition_matrices=transition_matrix,
observation_matrices=observation_matrix,
initial_state_mean=initial_state_mean,
)
filtered_state_means = np.zeros((len(measurements), 4))
filtered_state_covariances = np.zeros((len(measurements), 4, 4))
for i in range(len(measurements)):
if i == 0:
filtered_state_means[i] = initial_state_mean
filtered_state_covariances[i] = initial_state_covariance
else:
filtered_state_means[i], filtered_state_covariances[i] = (
kf.filter_update(
filtered_state_means[i-1],
filtered_state_covariances[i-1],
observation = measurements_masked[i])
)
其中 data 是从中提取纬度和经度的熊猫数据框。
这个逻辑正确吗?另外,我想做的是采用更接近缺失观察的观察来预测缺失值。例如,如果在 10 个样本的数组中,如果缺少第 5、6 和第 7 个观测值,则使用第 4 个样本预测第 5 个、使用第 8 个样本预测第 7 个并通过取第 5 个和第 7 个的平均值来预测第 6 个更有意义.
这种方法有意义吗?如果是,如何使用 pykalman 进行操作?如果不是,在数组中没有很多连续值的情况下,如何更准确地预测缺失值?