作为机器学习的新手,我有一组可能有不同长度的轨迹。我希望将它们聚类,因为它们中的一些实际上是相同的路径,并且由于噪声它们只是 SEEM不同。
此外,不所有这些都是相同的长度。因此,虽然轨迹A与轨迹B不同,但它是 轨迹B的一部分。我希望在集群之后呈现此属性。
我对K-means Clustering
和Fuzzy N-means Clustering
只有一点了解。 我怎么选择他们两个?或者我应该采用其他方法吗?
任何采用"属性"考虑到了什么?
(例如,在群集之后,我有3个群集A, B and C
。一个特定的trajectory X
属于cluster A
。较短的trajectory Y
,虽然没有群集在A
,被识别为trajectory B
的一部分。)
=================== UPDATE ======================
上述轨迹是行人'轨迹。它们可以表示为一系列(x, y)
点或一系列步进向量(length, direction)
。演示文稿由我控制。
答案 0 :(得分:13)
可能有点晚了,但我也在研究同样的问题。 我建议你看看 TRACLUS ,这是一个由Jae-Gil Lee,Jiawei Han和Kyu-Young Wang创建的算法,发表在SIGMOD'07上。 http://web.engr.illinois.edu/~hanj/pdf/sigmod07_jglee.pdf
到目前为止,这是我看到的聚类轨迹的最佳方法,因为:
基本上是一个两阶段的方法:
第一阶段 - 分区:将轨迹划分为多个段,这是使用复杂度为O(n)的MDL优化完成的,其中n是给定轨迹中的点数。这里的输入是一组轨迹,输出是一组段。
第二阶段 - 组:此阶段使用某些版本的基于密度的群集(如DBSCAN)发现群集。此阶段的输入是从第一阶段获得的一组分段和构成邻域的一些参数以及可构成一个集群的最小行数。输出是一组集群。群集是通过分段完成的。它们定义了由3个分量组成的自己的距离测量:平行距离,垂直距离和角距离。该阶段的复杂度为O(n log n),其中n是段的数量。
最后,他们为每个群集计算一个代表性轨迹,这是在每个群集中发现的共同子轨迹。
他们有非常酷的例子,这篇论文得到了很好的解释。再一次,这不是我的算法,所以如果你正在做研究,不要忘记引用它们。
PS:我根据他们的工作制作了一些幻灯片,仅用于教育目的: http://www.slideshare.net/ivansanchez1988/trajectory-clustering-traclus-algorithm
答案 1 :(得分:8)
每个群集算法都需要一个指标。您需要定义样本之间的距离。在你的情况下,简单的欧几里德距离不是一个好主意,特别是如果轨迹可以有不同的长度。
如果您定义了一个指标,那么您可以使用任何允许自定义指标的聚类算法。可能您事先并不知道正确的簇数,然后层次聚类是一个不错的选择。 K-means不允许自定义度量,但有K-means的修改(如K-medoids)
困难的部分是定义两个轨迹之间的距离(时间序列)。常见的方法是DTW(动态时间扭曲)。为了提高性能,您可以通过较少的点(许多算法)来近似您的轨迹。
答案 2 :(得分:5)
两者都不会起作用。因为什么是正确的意思?
查看基于距离的聚类方法,例如层次聚类(对于小型数据集,但您可能没有数千个轨迹)和DBSCAN。
然后你只需要选择适当的距离函数,例如轨迹的时间和空间分辨率的差异。
动态时间扭曲(DTW)距离等距离函数可以适应这种情况。
答案 3 :(得分:0)
这是一个很好的概念,可以用于实时应用程序。在我看来,可以采用任何聚类但需要选择适当的相异度度量,以后需要考虑计算复杂度。 论文(http://link.springer.com/chapter/10.1007/978-81-8489-203-1_15)使用了Hausdorff并提出了降低复杂性的技术,论文(http://www.cit.iit.bas.bg/CIT_2015/v-15-2/4-5-TCMVS%20A-edited-md-Gotovop.pdf)描述了“基于多视图相似性的轨迹聚类技术”的使用