【发布时间】:2013-05-08 16:25:47
【问题描述】:
我想看看两者的性能是否可以根据它们处理的目标函数进行比较?
层次化:单链接、完全链接和平均链接算法
非分层:模糊 C 均值和 K 均值
【问题讨论】:
标签: performance cluster-analysis hierarchical-clustering
我想看看两者的性能是否可以根据它们处理的目标函数进行比较?
层次化:单链接、完全链接和平均链接算法
非分层:模糊 C 均值和 K 均值
【问题讨论】:
标签: performance cluster-analysis hierarchical-clustering
不要混淆算法和任务。
k-means 的算法不止一种。实际上至少有两打。例如,有些人使用 k-d-trees 进行加速。而且它们都是启发式的,因为我相信找到最佳 k-means 解决方案通常是 NP 难的。
同样,还有用于层次聚类的朴素的O(n^3)运行时和O(n^2)内存方法,然后还有运行在@987654324中的用于单链接层次聚类的SLINK和用于完全链接层次聚类的CLINK等算法@时间和O(n)内存。
最后但同样重要的是,如果您使用 DBSCAN 并设置minPts=2,则在epsilon 的高度切割时,结果将有效地与单链接层次聚类相同。然而,通过适当的索引,DBSCAN 可以在 O(n log n) 中运行(例如,在 ELKI 中 - scipy 实现并不那么聪明,它需要 O(n^2) 内存和运行时)。
那么,为什么您可以为看似相同的任务使用如此不同的运行时?首先,一些算法(和实现)可能非常原始。易于实施和理解,但没有他们想象的那么聪明。其次,一些算法会执行您可能感兴趣或可能不感兴趣的额外工作。单链接层次聚类计算层次结构;带有minPts=2 的 DBSCAN 仅在此层次结构中进行了一次切割 - 比完整层次结构简单得多。最后但同样重要的是,还有启发式。大多数 k-means 变体都属于最后一类:通过接受错过全局最佳解决方案,您当然可以比执行穷举搜索更快。
【讨论】: