为什么Kruskal聚类会产生次优类?

时间:2013-12-05 03:47:50

标签: algorithm tree cluster-analysis minimum-spanning-tree kruskals-algorithm

我正在尝试开发一种聚类算法,其任务是在一组2D点上找到k类(使用k作为输入),使用轻微修改的Kruskal算法来找到k生成树而不是一个。

我使用兰特指数将我的输出与建议的最优值(1)进行了比较,对于k = 7,我得到了95.5%。比较可以在下面的链接中看到。

问题:

该组具有5个明显间隔的簇,这些簇很容易被算法分类,但是对于k> 1,结果相当令人失望。 5,这是事情开始变得棘手的时候。我相信我的算法是正确的,也许数据对于Kruskal方法特别糟糕。众所周知,单链接聚合聚类(如Kruskal)在某些问题上表现不佳,因为它将聚类质量评估降低到一对点之间的单一相似性。

算法的想法非常简单:

  • 使用数据集制作包含边缘权重的完整图表 是这对夫妇之间的欧氏距离。
  • 按重量对边缘列表进行排序。
  • 对于每个边缘(按顺序),如果它不形成循环,则将其添加到生成林中。遍历所有边缘或剩余森林有k棵树时停止。

enter image description here

底线: 为什么算法失败了?这是Kruskal的错吗?如果是这样,为什么呢?任何改善结果的建议没有放弃Kruskal?

(1):Gionis,A.,H。Mannila和P. Tsaparas,聚类聚合。 ACM交易 数据知识发现(TKDD),2007.1(1):p.1-30。

3 个答案:

答案 0 :(得分:4)

这称为单链接效果

Kruskal似乎是一种计算单连锁聚类的半聪明方式。用于"层次聚类的天真方法"是O(n^3),由于必须对O(n^2 log n)边缘进行排序,Kruskal方法应为n^2

请注意,SLINK可以在O(n^2)运行时和O(n)内存中进行单链接群集。

您是否尝试过加载数据集,例如进入ELKI,并将结果与​​单链路聚类进行比较。

要获得更好的结果,请尝试其他链接(通常位于O(n^3)运行时)或基于密度的群集,例如DBSCANO(n^2)无索引,O(n log n)指数)。在此玩具数据集中,epsilon=2minPts=5应该可以正常使用。

答案 1 :(得分:1)

群集之间的桥梁应该是不同的,这是Kruskal犯错误的典型例子。对于每个点,您可以尝试用距离该点的第二个最短距离覆盖该点的最短距离 - 这可能会增加桥中的长度而不会增加其他长度。

通过眼睛,这看起来像K-means可能做得很好 - 除了左上角,群集几乎是圆形。

答案 2 :(得分:0)

您可以尝试曼哈顿距离,但为了更好,您可以尝试经典的线和圆检测算法。