K-Means 算法 [重复]

Posted

技术标签:

【中文标题】K-Means 算法 [重复]【英文标题】:K-Means Algorithm [duplicate] 【发布时间】:2011-09-15 06:17:27 【问题描述】:

可能的重复:How to optimal K in K - Means AlgorithmHow do I determine k when using k-means clustering?

根据统计测量,我们可以决定 K。如标准偏差、均值、方差等, 或者

在K-means算法中有什么简单的方法来选择K吗?

提前致谢 纳文

【问题讨论】:

我在这里用六种方法(使用R)回答了一个类似的问题:***.com/a/15376462/1036500 【参考方案1】:

很遗憾没有。没有一种简单或复杂的有原则的统计方法可以设置“正确的 K”。有一些启发式的经验法则有时有效,有时无效。

这种情况更为普遍,因为许多聚类方法都有这些类型的参数。

【讨论】:

这些经验法则之一是什么?【参考方案2】:

智能选择问题有两个实用的解决方案 常用的质心数(k)。

首先是PCA您的数据,以及来自 PCA 的输出 - 这是 主成分(特征向量)及其对变化的累积贡献 在数据中观察到 - 显然表明质心的最佳数量。 (例如,如果您的数据中 95% 的可变性由前三个原则解释 组件,那么 k=3 是 k-means 的明智选择。)

第二种常用的智能估计k的实用方案是 是 k-means 算法的修订实现,称为 k-means++。在本质上, k-means++ 与原始 k-means 的区别只是增加了一个预处理 步。在此步骤中,估计质心的数量和初始位置。

k-means++ 所依赖的算法很容易理解并在代码中实现。 LingPipe 博客 中的 2007 Post k-means++ 的解释以及对原始论文的引用 首先介绍了这种技术。

除了为 k 提供最佳选择之外,k-means++ 显然优于 两种性能中的原始 k-means(相比处理时间大约为 1/2 在一个已发表的比较中使用 k-means)和准确性(三个数量级 在同一比较研究中的误差有所改善)。

【讨论】:

如果我错了请见谅,但我理解 k-means++ 提供了更好的初始化,但它不能确定质心的数量?【参考方案3】:

如果您明确想要使用 k-means,您可以研究描述 x-means 的文章。当使用 x-means 的实现时,与 k-means 相比的唯一区别是,您无需指定单个 k,而是指定 k 的范围。 “最佳”选择,wrt。一些措施,在范围内将是 x-means 输出的一部分。您还可以查看 Mean Shift聚类算法。

如果您的给定数据在计算上是可行的(可能按照 yura 的建议使用抽样),您可以使用各种 k 进行聚类,并使用一些标准聚类有效性度量来评估生成的聚类的质量。这里描述了一些经典措施:measures。

@道格 k-means++ 在集群分配开始之前确定集群数量的最佳 k 是不正确的。 k-means++ 与 k-means 的不同之处仅在于它不是随机选择初始 k 个质心,而是随机选择一个初始质心并连续选择中心,直到 k 被选择。在初始完全随机选择之后,数据点被选择为新质心,其概率由取决于数据点到已选择中心的距离的势函数确定。 k-means++ 的标准参考是 Arthur 和 Vassilvitskii 的 k-means++: The Advantages of Careful Seeding。

另外,我认为通常选择 k 作为主成分的数量不会改善您的聚类。想象一下 3D 空间中的数据点都位于穿过 origo 的平面上。然后,您将获得 2 个主成分,但点的“自然”聚类可以有任意数量的聚类。

【讨论】:

我同意你关于 PCA 在 k-means 中的作用。我认为,PCA 可能会提高算法的速度,因为对于较少的维度,可以更快地计算数据点之间的差异。但这并不一定会减少集群的数量。【参考方案4】:

Bayesian k-means 可能是您不知道集群数量时的解决方案。网站上有一篇相关的论文,也给出了相应的MATLAB代码。

【讨论】:

【参考方案5】:

未知(通过统计参数模型等)ML 问题的最佳解决方案是对数据进行采样并找到最适合子问题的参数,然后将它们用于完整问题。在这种情况下,为 5% 的数据选择最佳 K。

【讨论】:

以上是关于K-Means 算法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在R中扭曲K-Means算法以找到服务人员的最佳分配[重复]

K-means++算法

如何确定 k-means 算法的 K 值? [复制]

如何确定 k-means 算法的 K 值? [复制]

K-means聚类算法java实现

k-means算法概述