小批量 k-means 返回少于 k 个集群

Posted

技术标签:

【中文标题】小批量 k-means 返回少于 k 个集群【英文标题】:Mini-batch k-means returns less than k clusters 【发布时间】:2014-09-15 03:51:12 【问题描述】:

我一直在与 mini-batch k-means 合作,使用 scikit-learn 实现对大约 45000 个观测值的数据集进行聚类,每个观测值大约有 170 个特征。我注意到,随着 k 的增加,该算法无法返回指定数量的集群,如果 k 超过数据集中观察数量的 30%(45000 的 30%)并继续增加,则返回的集群数量确实不再增加。

我想知道这是否与算法在 scikit-learn 中实现的方式有关,或者它是否与它的定义有关。我一直在研究提出它的论文,但我不知道为什么会发生这种情况。

有人经历过吗?有谁现在如何解释这种行为?

【问题讨论】:

您使用的是哪个版本的 scikit-learn? batch_size 是多少?为了使算法正常工作,batch_size 应该显着大于集群的数量。你没有收到任何警告信息吗? 我总是使用比k大得多的batch_size,但我想如果k与数据集大小相比已经非常大,那么batch_size永远不会足够大。这可能是一种解释。 【参考方案1】:

k-means 可能会失败,因为 集群可能会消失

当您有很多重复项时,这一点最为明显。

如果您的所有数据点都相同,为什么应该有多个(非空)集群?

据我所知,它并不特定于小批量 k 均值。某些实现允许您指定集群退化时要执行的操作,例如使用最远的点作为新的聚类中心,丢弃聚类,或者保持不变(可能会再次拾取一个点)。

【讨论】:

【参考方案2】:

如果您使用 K-means,您需要告诉算法要使用的集群数量,它无法自行判断。

通过使用距离函数实现的聚类方法,以便使用定义的度量(如 eucludian)找到(全局但不是真正的)最小值。 您遇到的问题与如何确定集群数量有关,这是一个启发式问题,因为当您增加要使用的集群数量时,目标函数下降得更快,因此增加集群数量不会让您找到最优数据集中的集群。你会被没有真正不同的嘈杂集群卡住。

您可以参考 Jain, A. K. (2010)。数据聚类:超越 K-means 的 50 年。模式识别快报,31(8),651-666。 关于这个问题。

【讨论】:

以上是关于小批量 k-means 返回少于 k 个集群的主要内容,如果未能解决你的问题,请参考以下文章

matlab 的 k 均值是不是会重新计算种子的集群成员?

我可以在字符串上使用 K-means 算法吗?

技术视角机器学习之K-Means聚类算法详解

解释 K-means 的结果

K-means 预测?

在matlab中将测试数据划分为k-mean集群