pandas - 如何在没有太多优化的情况下有效地应用卡尔曼滤波器来清理时间序列数据?
问题描述
有人给了我一个提示,让我对我的数据集使用卡尔曼滤波器。与简单的插值方法(如
df.fillna(method="")
这基本上不费吹灰之力。
如果一两次迭代足以获得有用的结果,非常接近真正的缺失值,那么我愿意付出努力来实现它。(数据集长度 100.000 到 200mio 行)
如果它需要像神经网络本身那样进行优化,这在时间上可能会很昂贵,那么简单地使用 LSTM 不是更好吗?
解决方案
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.io和https://en.wikipedia.org/wiki/Kalman_filter
推荐阅读
- javascript - Javascript函数立即停止
- android - 使用 Android Canvas.drawCircle() 时如何在画布上制作圆形动画
- angular - Angular4 在超时时重播我的请求
- python-3.x - Python中今天日期和负3个月之间的条件语句
- java - Spring webflux:如何配置 Controller 和 WebClient 像代理一样工作?
- php - 语言子文件夹上的 htaccess 404 错误(en/)
- php - Laravel Eloquent 模型使用多个表合并为一个(没有单独的模型)
- javascript - 如何从对象数据创建新的对象名称?
- ios - 如何确定多个(n)日期时间范围何时相互重叠
- angular - 带有模拟用户输入的 RxJs/Ngrx TestSheduler (Jasmine)