作为机器学习的新手,我有一组轨迹,它们的长度可能不同。我希望对它们进行聚类,因为其中一些轨迹实际上是相同的路径,只是由于噪声的影响,看起来有所不同。
此外,并非所有轨迹的长度都相同。因此,尽管轨迹A与轨迹B不同,但它可能是轨迹B的一部分。我希望在聚类后也能展示这一特性。
我只对K-means聚类
和Fuzzy N-means聚类
有一点了解。如何在这两者之间做出选择?或者我应该采用其他方法?
有没有考虑到“归属感”的方法?(例如,聚类后,我有3个聚类A、B和C
。一个特定的轨迹X
属于聚类A
。而一个较短的轨迹Y
,虽然没有被聚类到A
中,但被识别为轨迹B
的一部分。)
=================== 更新 ======================
上述轨迹是行人的轨迹。它们可以表示为一系列(x, y)
点或一系列步长向量(长度, 方向)
。表示形式由我控制。
回答:
虽然可能有点晚,但我也在研究相同的问题。我建议你看看TRACLUS,这是由Jae-Gil Lee、Jiawei Han和Kyu-Young Wang创建的算法,发表在SIGMOD’07上。http://web.engr.illinois.edu/~hanj/pdf/sigmod07_jglee.pdf
这是我迄今为止见过的最佳轨迹聚类方法,因为:
- 可以发现常见的子轨迹。
- 关注的是段而不是点(因此可以过滤掉噪声异常值)。
- 适用于不同长度的轨迹。
基本上这是个两阶段的方法:
-
第一阶段 – 分割:将轨迹分成段,使用MDL优化,复杂度为O(n),其中n是给定轨迹中的点数。这里的输入是一组轨迹,输出是一组段。
- 复杂度:O(n),其中n是轨迹上的点数
- 输入:一组轨迹
- 输出:段集D
-
第二阶段 – 分组:这一阶段使用类似于DBSCAN的密度聚类方法发现聚类。输入是第一阶段获得的段集以及一些定义邻域和构成聚类所需的最小线数的参数。输出是一组聚类。聚类是在段上进行的。他们定义了自己的距离度量,由三部分组成:平行距离、垂直距离和角度距离。这一阶段的复杂度为O(n log n),其中n是段的数量。
- 复杂度:O(n log n),其中n是集合D中的段数
- 输入:段集D,参数E设置邻域阈值,参数MinLns是最小线数
- 输出:聚类集C,即段的聚类(聚类的轨迹)
最后,他们为每个聚类计算一个代表性轨迹,这实际上是每个聚类中发现的共同子轨迹。
他们有非常酷的例子,论文解释得非常清楚。再次强调,这不是我的算法,所以如果你在做研究,请不要忘记引用他们。
附注:我基于他们的工作制作了一些幻灯片,仅供教育目的:http://www.slideshare.net/ivansanchez1988/trajectory-clustering-traclus-algorithm