【问题标题】:k-means empty clusterk-均值空簇
【发布时间】:2012-06-19 23:24:55
【问题描述】:

我尝试将k-means 作为家庭作业。我的练习表给了我以下关于空中心的评论:

在迭代过程中,如果任何聚类中心没有与之关联的数据点,则将其替换为随机数据点。

这让我有点困惑,首先我读过的维基百科或其他来源根本没有提到这一点。我进一步阅读了“为您的数据选择一个好的 k”的问题 - 如果我开始为空的集群设置新的中心,我的算法应该如何收敛。

如果我忽略空集群,我会在 30-40 次迭代后收敛。忽略空簇是错误的吗?

【问题讨论】:

  • 这是一个“最小”的一维可复制示例初始化:{2, 3, 3, 3} {3, 7, 7, 7} {7, 8, 8, 8}。 (k=3) 第一次更新将清空中间簇!

标签: k-means


【解决方案1】:

您不应忽略空簇,而应替换它。 k-means 是一种只能为您提供局部最小值的算法,而空簇是您不想要的局部最小值。 即使你用一个随机点替换一个点,你的程序也会收敛。请记住,在算法开始时,您随机选择初始 K 点。如果它可以收敛,为什么 K-1 收敛点与 1 个随机点不能?只需要更多的迭代。

【讨论】:

    【解决方案2】:

    “为你的数据选择好的k”是指选择正确数量的簇的问题。由于 k-means 算法使用预定数量的聚类中心,因此必须首先选择它们的数量。选择错误的数字可能会导致难以将数据点划分为集群,或者集群可能变得小而无意义。

    对于忽略空集群是否是一个坏主意,我无法回答您。如果这样做,您最终得到的集群数量可能比您在开始时定义的要少。这会让那些期望 k-means 以某种方式工作的人感到困惑,但这并不一定是个坏主意。

    如果您重新定位任何空的聚类中心,但如果这种情况发生的次数有限,您的算法可能无论如何都会收敛。但是,如果您必须经常搬迁,您的算法可能不会终止。

    【讨论】:

      【解决方案3】:

      查看这个空集群如何发生的示例:http://www.ceng.metu.edu.tr/~tcan/ceng465_f1314/Schedule/KMeansEmpty.html 它基本上意味着 1) 力的随机震颤,或 2) k 簇的数量是错误的。您应该遍历 k 的几个不同值并选择最佳值。 如果在迭代过程中遇到空集群,请将随机数据点放入该集群并继续。 我希望这对你去年的家庭作业有所帮助。

      【讨论】:

        【解决方案4】:

        处理空集群不是 k-means 算法的一部分,但可能会导致更好的集群质量。说到收敛,它从来都不是精确的,而是只有启发式保证的,因此通过包含最大迭代次数来扩展收敛的标准。

        关于解决这个问题的策略,我想说随机分配一些数据点给它不是很聪明,因为我们可能会影响集群质量,因为到它当前分配的中心的距离很大或很小。这种情况下的启发式方法是选择离最大集群最远的点并移动空集群,然后这样做直到没有空集群。

        【讨论】:

        • farthest point from the biggest cluster“最大”在哪方面?
        • 我会将其解释为元素数量最多的点 - 但您也可以选择离集群中心最远的点。
        • 我猜离质心最远的点会更严格。如果您有一个大集群,其点非常接近其质心,我认为没有理由拆分它。
        【解决方案5】:

        对于“为您的数据选择合适的 k”,Andrew Ng 给出了一个 T 恤制造商的示例,该制造商查看潜在客户的测量结果并使用 k-means 来决定您是否要提供 S/M/L (k=3)或 2XS/XS/S/M/L/XL/2XL (k=7)。有时决策是由数据驱动的(k=7 给出空集群),有时是出于业务考虑(制造成本较低,只有三种尺寸,或者营销表示客户需要更多选择)。

        【讨论】:

          【解决方案6】:

          声明:k-means 可以导致

          考虑上述数据点的分布。

          • 重叠点表示它们之间的距离为del。 del 趋向于 0,这意味着您可以假设任意小值,例如 0.01。

          • 虚线框表示集群分配

          • 页脚中的图例代表数字线

          N=6 个点

          k=3 个簇(彩色)

          最终集群 = 2

          蓝色集群是孤立的,最终是空的。

          【讨论】:

            【解决方案7】:

            如果在分配步骤中没有将点分配给集群,则可以获得空集群。如果发生这种情况,您需要选择一个替换质心,否则 SSE 将大于必要。

            *选择对 SSE 贡献最大的点 *从具有最高 SSE 的集群中选择一个点 *如果有多个空簇,以上可以重复多次。

            ***SSE = 误差平方和。

            查看本站https://chih-ling-hsu.github.io/2017/09/01/Clustering#

            【讨论】:

              猜你喜欢
              • 2023-03-30
              • 2016-12-03
              • 2016-03-16
              • 2015-05-28
              • 2016-04-14
              • 2016-11-26
              • 1970-01-01
              • 2020-04-19
              • 2019-11-06
              相关资源
              最近更新 更多