gpt4 book ai didi

java - 时间序列中的峰值检测

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:22 24 4
gpt4 key购买 nike

我目前正在做一个小项目,我想在其中比较两个时间序列。相似性度量非常模糊,如果两个时间序列大致具有相同的形状,则认为它们相似。

所以我心想“好吧,如果它们只需要具有相同的形状,我只需比较两个时间序列的峰值,如果峰值位于相同的位置,那么时间序列肯定会相似"

我现在的问题是找到一个好的峰值检测算法。我用了谷歌,但我只找到了论文 Simple Algorithms for Peak Detection in Time-Series .问题是,本文中描述的算法适用于非常极端和薄的峰,但在大多数情况下,我的 time-series具有相当平坦的峰,因此不会被检测到。

有人知道我在哪里可以找到或搜索可以检测下图中所示峰值的算法吗?

time-series

最佳答案

您似乎只是在寻找斜率反转(从正到负,反之亦然)。粗略的 Java 算法可能是(未测试):

List<Point> points = ... //all the points in your curve
List<Point> extremes = new ArrayList<Point> ();
double previous = null;
double previousSlope = 0;

for (Point p : points) {
if (previous == null) { previous = p; continue; }
double slope = p.getValue() - previous.getValue();
if (slope * previousSlope < 0) { //look for sign changes
extremes.add(previous);
}
previousSlope = slope;
previous = p;
}

最后,衡量相似性的一个好方法是相关性。在你的情况下,我会看看 % move correlation(换句话说,你希望你的 2 个系列同时上升或下降)——这通常是在金融领域所做的,例如,你计算 2 个 Assets 返回之间的相关性:

  • 创建 2 个新系列,为 2 个系列的每个点移动 %
  • 计算这两个系列之间的相关性

您可以阅读更多关于 returns correlations here for example 的信息.总之,如果您的值(value)观是:

Series 1  Series 2
100 50
98 49
100 52
102 54

“回归”系列将是:

Series 1  Series 2
-2.00% -2.00%
+2.04% +6.12%
+2.00% +3.85%

然后您计算这 2 个返回系列的相关性(在此示例中:0.96),以衡量这 2 个曲线看起来有多相似。您可能想要针对方差调整结果(即,如果一个形状的范围比另一个形状大得多)。

关于java - 时间序列中的峰值检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12250134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com