algorithm - 为什么 K-means 算法优于 Kruskal 的聚类算法

标签 algorithm machine-learning cluster-analysis k-means kruskals-algorithm

我正在 Coursera 上学习 Andrew Ng 的机器学习类(class)。在讨论聚类时,他告诉我们,K-均值聚类算法是使用最广泛的。 我之前还使用了 Kruskal 的聚类算法,这是一种非常有效的算法,具有路径压缩和基于等级的联合。 是什么让 K-means 优于 Kruskal 算法?

最佳答案

Kruskal 算法和 k-means 聚类通常会生成非常不同的聚类,因为它们经过优化可以找到不同的东西。

例如,考虑一条线上的 n 个点,这些点或多或少均匀分布,除了每个点与右侧点的距离比左侧点稍微远一些。也就是说,如果缩小,您或多或少会看到 n 个均匀分布的点,但在放大时,您会发现距离并不完全相同,而是从左到右增加。

Kruskal 的算法找到了一个最大分离聚类,这意味着它将节点分开,使聚类之间的距离尽可能大。在这种情况下,k=2 的最大分离聚类会是什么样子?由于距离随着我们从左向右移动而增加,它会找到“除了最右边的节点之外的所有内容”和“最右边的节点”的聚类。

另一方面,K 均值聚类找到一个最小化簇内方差 的聚类,这意味着它对节点进行分组,以便聚类节点通常彼此靠近。对上述数据集运行 k-means 会将点沿中心线大致分成两半,返回大小大致相同的两个簇。

那么哪个是“更好”的聚类?这取决于您的应用程序。我怀疑我们更喜欢第二个集群是因为我们希望集群中的节点尽可能彼此相似。这就是为什么我们经常看到 k-means 聚类比 Kruskal 算法使用得更多,尽管在某些情况下 Kruskal 还是很不错的。

请注意,此问题与效率正交。是的,Kruskal 的算法非常快,但它计算的东西与 k-means 计算的不同。

希望这对您有所帮助!

关于algorithm - 为什么 K-means 算法优于 Kruskal 的聚类算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62133300/

相关文章:

python - 使用 sklearn.AgglomerativeClustering 绘制树状图

python - 如何根据 python 中最近的集群质心逻辑将新观察分配给现有的 Kmeans 集群?

c++ - random_shuffle() 对象 vector 时出现大量错误?

java - 信号处理(Java)

algorithm - 费马分解法极限

python - 如何组合多个朴素贝叶斯分类器的输出?

machine-learning - ROC 曲线良好,但精确率-召回率曲线较差

algorithm - 分区选择算法

javascript - 加载经过训练的模型并在 Node js 中运行测试

r - R 中的圆柱聚类 - 与其他数据的聚类时间戳