我试图看看两者的表现是否可以根据他们所处理的目标函数进行比较?
分层:单一链接,完整链接和平均链接算法
非等级:模糊C均值和K均值
答案 0 :(得分:0)
请勿混淆算法和任务。
k-means有多种算法。实际上至少有二十几个。例如,一些人使用k-d树来加速。而且它们都是启发式的,因为我认为找到最佳的k均值解决方案通常是NP难的。我相信。
类似地,存在用于分层聚类的天真O(n^3)
运行时和O(n^2)
存储器方法,然后存在诸如用于单链接层级聚类的SLINK和用于完全链接层级聚类的CLINK的算法。在O(n^2)
时间和O(n)
内存中运行。
最后但并非最不重要的是,如果您使用DBSCAN并设置minPts=2
,则在epsilon
的高度切割时,结果实际上与单链路层次聚类相同。然而,使用适当的索引,DBSCAN在O(n log n)
中运行(例如在ELKI中 - scipy实现不那么聪明,需要O(n^2)
内存和运行时。)
那么为什么你可以为显然相同的任务拥有不同的运行时间?首先,一些算法(和实现)可能非常原始。易于实施和理解,但不是那么聪明。其次,一些算法执行您可能或可能不感兴趣的额外工作。单链接层次聚类计算层次结构; DBSCAN与minPts=2
只有一个切入此层次结构 - 比完整层次结构更简单的 结果。最后但并非最不重要的是,有启发式。大多数k-means变体属于最后一类:通过接受错过全球最佳解决方案,您当然可以比进行详尽搜索时更快。