【问题标题】:how to approximate time-series data如何近似时间序列数据
【发布时间】:2016-12-27 19:01:02
【问题描述】:

我不确定这是否是正确的术语,但我想我想用 s̶m̶o̶o̶t̶h̶̶a̶n̶d̶/̶o̶r̶ 近似一个数据集。我有 30 个数据点,如下图所示(带点的红线) 我想近似数据集,以便可以用更少的数据点来描述它。黑线代表我想要达到的目标。

我希望能够定义一个近似级别,该级别将控制结果数据集与原始数据集的差异程度。 近似的数据集应该包含一组数据点,我可以使用直线将它们连接在一起。

解决这个问题的正确算法或数学函数是什么?我不希望这里有一个实现,而是一些从哪里开始的建议。

我编写了近似算法的实现。它在大多数情况下都有效,但在某些情况下它会返回非最佳数据。 下面的示例显示了三个虚线。细红线是原始数据集,粗红黑虚线是我的算法生成的,绿线是我想要实现的。

        var previousValue;
        return array.map(function (dataPoint, index, fullArray) {
            var approximation = dataPoint;

            if (index > 0) {
                if (Math.abs(previousValue - value) < tolerance) {
                    approximation = previousValue;
                } else {
                    previousValue = dataPoint;
                }

            } else {
                previousValue = dataPoint;
            }

            return approximation;
        });

【问题讨论】:

  • 你有没有尝试过?我怀疑是否有适合您的黑线的标准算法,因为您的 x 轴点的间距不均匀。考虑使用“移动平均线”对数据进行平滑处理,然后每 n 个点选取一次以减少点数。
  • 为简化起见,我们假设 x 轴上的点与红点对齐,但红点较少。我编写了自己的算法来进行近似,该算法基本上从左到右并忽略了在一定公差范围内的所有点。如果某个值超出容差水平,则会创建一个新数据点并将其设置为新的比较基准。该算法工作正常,但在某些情况下它并不完美。这就是为什么我要问是否有任何通用的解决方案,所以我不必重新发明轮子。我在上面添加了我的算法的示例输出。

标签: charts time-series smooth approximation


【解决方案1】:

这里有两个选项:

  1. 如果数据中显示的“故障”很严重,意味着您无法对其进行平滑处理。
  2. 如果显示的所有数据都可以近似并且“故障”不显着

在 (1) 情况下,您可以考虑通过模板进行近似(例如小波)或使用基本微分分析来检测和保持“故障”(例如网格)。 在(2)的情况下,你可以使用 MA、ARIMA 来拟合,其中“故障”可以通过根进一步分析

【讨论】:

    【解决方案2】:

    好的,澄清一点,您是要平滑数据还是近似数据?如果您要平滑数据,根据定义,它将消除数据系列中的小起伏。另一方面,如果目标是准确描绘所有这些低谷和颠簸,那么您不需要平滑。我要谈的是平滑,如果你想要另一个,你告诉我。

    好的,我知道平滑数据的最佳方法是使用 alpha 值。方程为 Tn+1=(1-α)Tn+αDatan+1。这意味着您设置下一个功能点中受系列历史影响的部分和受当前数据点影响的部分。

    Example graph with alpha = .5 看看这个数据。这里α=.5。所以函数符合数据,但不是很多。下面是相同的,但 alpha 为 0.25。所以数据被跟踪的更少,但功能更流畅。还有第三种选择,其中 α 随着时间的推移而减小。最初它可能非常高,因此您可以快速跟踪数据,但随着 α 随着时间的推移而减小,趋势变得更加平滑并随着时间的推移保持平滑。最后,您可以对最小 α 设置硬性限制,这将确保您始终对数据有一些最小响应。

    Example graph with alpha = .25

    【讨论】:

    • 好的,谢谢您的解释。它帮助我理解我真正需要的是一个近似值。本质上,我想减少数据点的数量并尽可能接近图形的原始形状。我的第一个图表将红色数据集的近似值显示为黑线。我只需要 5 点来描述那条线(包括起点和终点)
    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 2021-01-22
    • 1970-01-01
    • 2021-07-29
    • 2012-10-07
    • 1970-01-01
    • 2021-03-11
    • 2021-02-14
    相关资源
    最近更新 更多