时间序列的快速傅里叶变换和聚类

Posted

技术标签:

【中文标题】时间序列的快速傅里叶变换和聚类【英文标题】:Fast Fourier Transform and Clustering of Time Series 【发布时间】:2014-05-08 22:02:21 【问题描述】:

我正在制作一个与识别销售动态相关的项目。这就是我的数据库部分看起来像http://imagizer.imageshack.us/a/img854/1958/zlco.jpg。共有三列:

产品 - 展示产品组

周 - 自推出产品后的时间(周),前 26 周

Sales_gain - 每周产品销售额如何变化

在数据库中有 3302 个观测值 = 127 个时间序列

我的目标是将时间序列分组,以向我展示不同的销售动态。在聚类之前,我想使用快速傅立叶变换来改变向量的时间序列并考虑幅度等,然后使用距离算法和分组产品。

这是我第一次处理 FFT 和聚类,所以如果有人指出步骤,我将不胜感激,我必须在使用 FFT 对销售动态进行分组之前/之后执行这些步骤。我想在 R 中完成所有步骤,所以如果有人键入我应该使用哪个程序来完成所有步骤,那就太好了。

这就是我的时间序列现在的样子http://imageshack.com/a/img703/6726/sru7.jpg

请注意,我对时间序列分析比较陌生(这就是为什么我不能在这里放我的代码),因此您可以在 R 中提供任何清晰的说明或您可以推荐的任何可以有效完成此任务的包,我们将不胜感激。

附:我在这里找到了 DWT 的代码而不是 FFT -> www.rdatamining.com/examples/time-series-clustering-classification 但不能在我的数据库和时间序列上使用它(建议 R 在 26 周后分析新的时间序列) .可以给我解释一下吗?

【问题讨论】:

由于更多的是算法问题而不是编程问题,你最好在dsp.stackexchange.com提问。 您的期望是什么?您是否期望明星产品起飞而不是哑产品淡出?您是否尝试了一些简单的工具(例如 互相关)来确定哪些系列随着时间的推移具有相似的行为?执行回归分析然后根据其参数进行聚类也很有用。傅立叶变换通常用于(伪)周期性信号,但在您的情况下,似乎没有足够的数据可用(即 26 周太少而无法捕捉季节性事件)。 回归分析是什么意思?为每个时间序列创建模型?哪种方法可以根据其参数对组观察进行聚类? 【参考方案1】:

您的数据可能太少,FFT/DWT 无法理解。 DTW 可能更好,但我也认为这对销售数据没有意义——为什么从一个位置到另一个位置会有 x 周的时间偏移?并不是说数据是在未知的起始周捕获的。

当您的数据具有有趣的重复模式时,FFT 和 DWT 很好,并且您有 A) 良好的时间分辨率(对于音频数据,例如 16000 Hz - 我说的是数千个数据点!)和B)您不知道期望的频率。如果你知道例如您将有每周模式(例如周日没有销售),那么您应该使用 other 算法过滤它们。

当您不知道何时事件开始以及它们如何对齐时,

DTW(动态时间扭曲)很好。假设您正在捕获心脏测量值。你不能指望两个主体的心脏同步跳动。 DTW 将尝试对齐此数据,并且可能(或可能不会)成功匹配,例如两名受试者的心跳异常。理论上...

也许你根本不需要专门的时间方法。

A) 您的数据的时间分辨率太低

B) 你的数据已经完全对齐了

也许您只需要花更多时间来预处理您的数据,尤其是规范化,以便能够捕获相似性。

【讨论】:

感谢您的回答!那么你建议什么方法?我想要达到的结果是对具有不同销售动态的产品进行聚类,并在图上呈现这些不同的动态。 我建议做很多预处理,而不是你觉得舒服的任何算法,这会产生合理的结果。但预处理是关键。 (并且取决于您的数据,我们无法帮助您进行预处理)。

以上是关于时间序列的快速傅里叶变换和聚类的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV C++(十)----傅里叶变换

关于快速傅里叶变换

快速傅里叶变换fft

音频算法入门-傅里叶变换

快速傅里叶变换FFT(Fast Fourier Transform)

FFT(快速傅里叶变换)