不规则时间间隔的平滑算法

机器算法验证 时间序列 平滑 不均匀间隔时间序列
2022-04-03 05:15:08

我有各种不规则间隔时间序列数据集,我想对其应用某种平滑算法以产生良好的拟合。

我尝试了各种方法,但都不令人满意。

  1. 黄土 - 对异常值过度反应/过度反应的倾向过多
  2. 移动平均线 - 滞后是不可接受的

示例数据集

http://i.stack.imgur.com/sFkTe.png

我已经阅读了“Improved Holt Method for Irregular Time Series”,但是这篇论文对我来说太难理解和用 C# 实现了。

有人可以指出一个产生良好平滑的好方法/算法吗?

该方法必须能够计算时间处的平滑点,而不需要等数据。它还必须能够处理时间值。tt+1yx

2个回答

最简单的算法是中值滤波器。您可以在 R 包robfilter中找到 C++ 实现该实现还包括一个“在线”版本,它只使用过去的数据并实现一些算法捷径

当然,您仍然需要自己设置“宽度”参数,但这是寻找简单算法的对应部分(这个包还包含更复杂的平滑算法)。

中值滤波器本质上是一个滚动窗口中值,因此它继承了中值在对异常值不敏感和非参数解释能力方面的良好行为。

因此,考虑到您发布的数据集,中值滤波器将产生:

中值滤波器

和代码:

a1<-read.table("sodat.txt",header=TRUE)
library("robfilter")
d1<-med.filter(a1[,2],width=10,online=TRUE)
plot(d1)

我认为您想要的是中值滤波器:“中值滤波在数字图像处理中应用非常广泛,因为在某些条件下,它可以在去除噪声的同时保留边缘”。