14

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

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

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

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

4

7 回答 7

9

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

于 2013-11-06T20:26:52.177 回答
4

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

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

于 2014-01-25T17:28:32.463 回答
4

声明:k-means 可以导致

下面是给定分布上 k-means 的执行流程

考虑上述数据点的分布。

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

  • 虚线框表示集群分配

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

N=6 点

k=3 簇(彩色)

最终集群 = 2

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

于 2019-02-22T06:57:11.707 回答
3

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

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

***SSE = 平方误差之和。

检查此站点https://chih-ling-hsu.github.io/2017/09/01/Clustering#

于 2019-11-12T14:30:43.937 回答
1

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

于 2012-06-18T20:33:36.823 回答
1

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

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

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

于 2013-03-13T17:49:48.877 回答
0

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

于 2018-12-27T16:51:54.417 回答