首页 > 解决方案 > 如何在没有太多优化的情况下有效地应用卡尔曼滤波器来清理时间序列数据?

问题描述

有人给了我一个提示,让我对我的数据集使用卡尔曼滤波器。与简单的插值方法(如

df.fillna(method="")

这基本上不费吹灰之力。

如果一两次迭代足以获得有用的结果,非常接近真正的缺失值,那么我愿意付出努力来实现它。(数据集长度 100.000 到 200mio 行)

如果它需要像神经网络本身那样进行优化,这在时间上可能会很昂贵,那么简单地使用 LSTM 不是更好吗?

标签: pandastime-serieslstmdata-cleaningkalman-filter

解决方案


pykalman是用于实现卡尔曼滤波器的包。

卡尔曼滤波器首先用于清理制导系统的数据,获取噪声数据并为控制系统快速清理。

这是一个简单的例子

from pykalman import KalmanFilter
import numpy as np

kf = KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0], [0,0], [0,1]])  # 3 observations
kf = kf.em(measurements, n_iter=5)
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurements)

关于如何设置状态空间和代码的讨论在https://pykalman.github.iohttps://en.wikipedia.org/wiki/Kalman_filter


推荐阅读