【问题标题】:k means produces empty clustersk 表示产生空簇
【发布时间】:2015-05-28 10:09:48
【问题描述】:

我已经实现了一个 k 均值聚类算法,如 http://faculty.uscupstate.edu/atzacheva/SHIM450/KMeansExample.doc 所述

对于某些数据集,我发现生成的集群数量并不总是等于初始 k。这是意料之中的吗?

我认为这是意料之中的,因为在每次迭代之后,每个数据点都会添加到最近的集群中,但这并不能保证所有集群都会被填充。每个集群在每次迭代后都会重新初始化,因此某些集群可能没有足够接近点而无法添加任何点。

【问题讨论】:

  • 这不应该发生。你是从一组对象中取出前 K 个质心吗?它们应该是随机对象(来自集合),但不是随机坐标。
  • @Tilo 我从一组对象中随机取 k 个质心,坐标是从选择的随机点中选择的。坐标本身不是随机的。
  • @Tilo 请查看问题更新
  • 感谢分享链接!很长一段时间以来,我一直在使用该算法的变体,并且从来没有空集群,但这可能只是我正在使用的数据的一些属性。
  • 我正在使用的 @Tilo 数据集非常稀疏,并且每个点的距离都相对较近,这可能导致无法将点添加到所有集群中。

标签: k-means


【解决方案1】:

我在图像处理方面遇到了与您相同的问题。希望我的经历能给你一些启示……

我正在尝试对原始大小为 720*1280,聚类数为 10 的图像进行 kmeans 算法。

但是,我觉得这太大了,所以我(愚蠢地)使用高斯金字塔将这张图片压缩成 144*256。

然后,在运行 kmeans 并达到收敛后,我发现几乎还有 5 个集群集是空的。

我尝试修改我的算法,例如:如果集群为空,那么我将分配一个新像素作为中心并重试,或者划分最大的集群集。

最后,我意识到如果有空簇,它只意味着簇号是否不正确(你可以看到不像基于密度的聚类,k-means需要你指定簇号作为参数,并且值很重要。)或者你使用的数据集不够大。

所以我使用原始图像作为输入,现在我发现集群已满。

最后,我建议您尝试更大的样本量数据,或者,只需更改您分配的集群编号。

【讨论】:

    【解决方案2】:

    本文描述了可能出现k个均值的空簇http://www.academypublisher.com/ijrte/vol01/no01/ijrte0101220226.pdf

    k-means 算法的主要问题之一是它可能 根据初始中心向量产生空簇。对于静态 k-means 的执行,这个问题被认为是无关紧要的 可以通过多次执行算法来解决。

    【讨论】:

    • 我也面临同样的问题,所以每当我发现一个空集群时,我都会简单地重做 kmeans。大多数时候它都会得到解决。
    • @tuxdna 根据我的经验,随着 K 值的增加,生成空簇的概率也会增加。
    • 我的另一个观察结果是,在降维时空簇的出现率更高,同时保持样本数和 K 与原始维度相同。这只是一个观察。
    猜你喜欢
    • 2018-04-17
    • 2017-12-29
    • 2012-06-19
    • 2016-04-14
    • 2016-11-26
    • 2016-12-18
    • 2017-03-25
    • 2017-06-09
    • 2015-01-05
    相关资源
    最近更新 更多