在Python

时间:2017-08-10 03:51:00

标签: machine-learning time-series cluster-analysis hierarchical-clustering

我正在尝试使用不同的聚类技术在Python中聚类时间序列数据。 K-means没有给出好的结果。以下图像是使用凝聚聚类进行聚类后的图像。我也尝试过动态时间扭曲。这两个似乎给出了类似的结果。

我理想的是,第二张图片中的时间序列有两个不同的聚类。第一张图像是用于快速增加的群集。第二个没有增加类似稳定,第三个是减少趋势的集群。我想知道哪个时间序列是稳定的以及流行的(在这里流行,我的意思是高计数)。我尝试了层次化聚类,但结果显示了太多的层次结构,我不知道如何选择层次结构的级别。有人能否阐明如何将第二张图像中的时间序列分成两个不同的簇,一个是低计数而另一个是高计数?有可能吗?或者我应该直观地选择一个阈值将其切成两个?

快速增长的群集:

enter image description here

具有稳定计数的群集:

enter image description here

趋势减少的集群:

enter image description here

这非常模糊,但这是我的层次聚类的结果。

enter image description here 我知道这个特殊的图像根本没用,但这对我来说也是一个死胡同。

一般情况下,如果您想要区分趋势,比如说对于YouTube视频,那么只有一些人可以选择这些趋势"趋势"这个星期和#34;以及#34;和#34;部分?我理解"趋势"部分视频是与第一张图像具有相似特征的视频。 "本周趋势"该部分有一组视频,这些视频具有非常高的视图数,但在计数方面是安静的(即没有显示快速增加)。我知道,就YouTube而言,除了视图计数之外,还有许多其他因素需要考虑。在第二张图片中,我想要做的是与本周的趋势类似的#34;部分。我想选择计数非常高的那些。在这种情况下如何拆分时间序列?

我知道DTW可以捕捉趋势。 DTW给出与上述图像相同的结果。它已经确定了第二张图像的趋势,即稳定"。但它并没有捕获"计数"元素在这里。我希望捕获趋势和计数,在这种情况下稳定和高计数。

以上图像是基于计数聚类的时间序列。我是否错过了可以实现此目的的任何其他聚类技术?即使只计算,我如何根据自己的需要进行不同的聚类?

任何想法都会非常感激。提前谢谢!

2 个答案:

答案 0 :(得分:0)

您可以做的最好的事情是从时间序列中提取一些功能。 在您的案例中提取的第一个功能是趋势linear trend estimation

您可以做的另一件事是将您的时间序列的累积版本分组,如同在其他帖子中建议和解释的那样:Time series distance metrics

答案 1 :(得分:0)

您可以使用DTW通过计算总的最小距离来聚类趋势,有关其他类似问题,请参见my answer here。我有一个非常接近这个问题,最终我为此部署了自己的python软件包。检查this了解更多信息。您还可以看到一个演示here