k-means 初始中心确定结果?

Posted

技术标签:

【中文标题】k-means 初始中心确定结果?【英文标题】:k-means initial centers determine the result? 【发布时间】:2014-01-25 10:28:10 【问题描述】:

K-means 聚类是一种常用的聚类方法。假设有 N 个点进行 K-means 聚类,即 N 个点应该被分成 K 组,每组中的点之间具有相似性。

我们应该在K-means clustering进程之前给初始中心赋值,这里我从所有点中随机选择K个点,程序每次运行得到不同的输出。为什么这会导致不同的结果,我怎么知道哪个是最好的分类?

【问题讨论】:

执行此 N/K 次,每次留出一个测试并用它来对您分类的点进行基准测试。这使您可以衡量您的分类有多好。 (注意:不要从 K 中选择结果最好的那一个,这并不是说它是最好的分类——这是为了测试你的分类)。 @BenjaminGruenbaum 您能否详细说明您将如何进行基准测试?最初我以为您在谈论validation set(我不确定它会如何工作,因为这些点最初没有标记),但现在我不再那么确定了。 【参考方案1】:

首先,k-means 聚类算法不一定会产生最佳结果,因此这已经是一个相当重要的指标,表明它可能从不同的起点得到不同的结果。

这真的归结为这样一个事实,即每个集群使用自己集群中的点来确定它应该移动到哪里 - 如果所有集群都找到了到达各自点中心的路,那么算法将终止,并且那里这可能会以多种方式发生。

考虑这个例子:(. 表示 4 个点,x 表示 2 个集群)

.         .                      .    x    .
x         x         versus       
.         .                      .    x    .

左右两边都收敛了,但明显不同(右边明显更差)。

要找到最好的,您可以选择最小化从中心到分类在其下的每个点的平方距离之和的结果(毕竟,这是the goal of k-means clustering)。

【讨论】:

也许遗传算法可以帮我选择初始中心的最佳组合,假设我们使用N-size数组来表示选择了哪个点,即1i-th位置表示@ 987654328@点被选中,能告诉我适应度函数怎么定义吗?我不知道这里适合什么? @stonestrong 同样,适应度函数可以是平方距离的总和(您希望再次最小化)。【参考方案2】:

我们的想法是使用 K 个不同的质心为您的聚类运行多次聚类算法,并使用从您的数据集中随机抽取的 K 个点进行初始化。

那么您的最佳解决方案将是最小化一个点与其所属集群的质心之间的平方距离之和。

【讨论】:

【参考方案3】:

K-means 的工作原理是尝试改进给出的答案,直到达到局部最优,但有一个很好的论点是没有单一的全局最优,因此没有单一的局部最优。如果有,那么同一数据集上的每个 K-means 算法总是会收敛到相同的答案。但不可能发生,因为如果我在 K-means 收敛后得到一个答案并对集群重新编号,我会得到另一个不同的答案,但得分与我开始时的答案完全相同,因此实际上存在多个全局最优值。

有多种方案可以为 K-means 提供起点,您可以尝试这些方案以及随机选择起点。最近的一些声称提高了速度,例如http://en.wikipedia.org/wiki/K-means%2B%2B。在http://jihe.net/downloads/papers/he04ijcnn.pdf有一些更简单方法的测试

【讨论】:

以上是关于k-means 初始中心确定结果?的主要内容,如果未能解决你的问题,请参考以下文章

分组聚集的K-means算法应用实例

常用聚类算法之一k-means实例解析

K-means聚类算法java实现

k-means聚类

K-means聚类与EM算法

K-means