如何确定正确的群集数量?


54

我们找到了聚类中心,并在k均值聚类中将点分配给k个不同的聚类箱,这是一种非常著名的算法,几乎可以在网上的每个机器学习包中找到。但是在我看来,缺失和最重要的部分是选择正确的k。最好的价值是什么?而且,什么是最好的

我使用MATLAB进行科学计算,其中考虑轮廓图是决定此处讨论的 k的一种方法。但是,我会对贝叶斯方法更感兴趣。任何建议表示赞赏。


2
好问题...


用于群集的可视化有一种方法可以使用MST对k个群集进行图片显示并一次查看各种k的效果。
denis 2012年

我已经回答了这个问题半打方法R这里

1
确定集群的“最佳” 数量k意味着比较具有不同k的集群解决方案-哪个解决方案“更好”。从这一方面来看,该任务看起来与比较聚类方法的方式类似 -这对于您的数据而言“更好”。一般准则在这里
ttnphns

Answers:


28

这个问题已经在stackoverflow上问了几次:hereherehere。您可以看一下那里的人群对这个问题的看法(或其小变形)。

让我也在stackoverflow.com上复制我对这个问题的答案:

不幸的是,没有办法自动设置“正确的” K,也没有定义什么是“正确的”。没有原则性的统计方法(简单或复杂)可以设置“正确的K”。有启发式的经验法则有时有效,有时无效。

这种情况更为普遍,因为许多聚类方法都具有这些类型的参数,我认为这是聚类/无监督学习研究社区中的一个大问题。


+1看完这篇文章后-对我来说似乎很直观....但是我必须说我以前从未想过。,实际上在PCA中选择PC数量的问题等同于在K均值中选择群集数量的问题...
Dov 2012年

2
@Dov这两件事并不完全等效。有一些特定的方法可用于检查PCA解决方案的质量(最明显的是重建误差,但也可以捕获百分比变化等),并且这些方法(大部分)趋于一致。但是,在聚类中通常没有一个“正确答案”-一个聚类可能比一个聚类更好,而使用另一个度量则可能相反。在某些情况下,在同一度量标准下,两个不同的聚类可能同等概率。
tdc 2012年

@tdc,但不是这个en.wikipedia.org/wiki/…或多或少都像这个改良的 outcomes.com/docs/WebSiteDocs/PCA/… 吗?
2012年

2
@Dov是的,它们彼此“或多或少”,但是我只是说选择集群数量的问题比选择PC的数量更为困难-即它们不是“等效的”。
tdc 2012年

1
+1你是对的。我们介绍了一些其他模型或假设来确定最佳k,但问题却出在那是为什么该模型或假设是最佳...
petrichor 2012年

19

首先要注意。在聚类中,通常没有一个“正确答案”-一个聚类可能比另一个聚类好一个度量标准,反之则可能适用另一度量。在某些情况下,在同一度量标准下,两个不同的聚类可能同等概率。

话虽如此,您可能想看看Dirichlet Processes。另请参阅本教程

如果从高斯混合模型开始,则与k均值存在相同的问题-必须选择簇数。您可以使用模型证据,但是在这种情况下它不会很可靠。因此,诀窍是先对混合成分使用Dirichlet处理,然后使您可以拥有无​​限数量的混合成分,但是模型(通常)会自动找到“正确”数量的成分(在该模型)。

注意,您仍然必须先指定Dirichlet Process 的浓度参数。对于较小值,来自DP的样本可能由少量的具有较大权重的原子量度组成。对于较大的值,大多数样本可能是不同的(集中的)。您可以在浓度参数上使用超优先级,然后从数据中推断出它的值,并且该超优先级可能会含糊不清,以允许使用许多不同的可能值。但是,如果有足够的数据,浓度参数将不再那么重要,并且可以放弃此优先级。ααα


1
在什么浓度参数下的狄利克雷过程?它相当于相同的原始问题,k表示在什么k下?尽管我同意我们可以更好地了解Direchlet分布,但Direchlet分布表明某些复杂算法在某些实际数据上的行为。
carlosdc

@carlosdc好点,我已经更新了答案,包括了有关浓度参数的一些讨论
tdc 2012年

1
以我的经验,学习连续值的浓度参数(例如alpha)要比确定有限混合模型中的簇数容易得多。如果您想坚持有限的混合模型并采取贝叶斯方法,可以使用可逆跳MCMC(onlinelibrary.wiley.com/doi/10.1111/1467-9868.00095/abstract

1
好答案。我将添加论文《重新审视K均值:通过贝叶斯非参数的新算法》。这为K均值提供了一种简单的“连续”方法。然后,使用优化很容易找到最佳值。
罗伊

9

我使用Elbow方法

  • 从K = 2开始,并在每一步中将其递增1,以计算您的集群和培训附带的成本。以一定的K值,成本会急剧下降,此后,当您进一步增加时,它会达到平稳状态。这是您想要的K值。

这样做的理由是,您增加了群集的数量,但是新群集非常接近现有群集。


听起来这是L方法(请参见我的答案)评估的原理。
winwaed'2

6

群集大小在很大程度上取决于您的数据以及您将要使用的结果。如果您使用数据将事物划分为类别,请尝试想象您首先需要多少个类别。如果用于数据可视化,请使其可配置,这样人们既可以看到大型群集,也可以看到较小的群集。

如果需要使其自动化,则可能要增加k的代价,并以此方式计算最佳群集。然后,您只需要权重k即可,具体取决于您想要一吨集群还是很少集群。



5

我设法使用“ L方法”来确定地理应用程序中的簇数(即,虽然在技术上不是欧几里得,但本质上是一个二维问题)。

L方法的描述如下: 确定层次聚类/细分算法中的聚类/细分数量Stan Salvador和Philip Chan

本质上,这会评估各种k值的拟合度。可以看到“ L”形图,图中的膝盖代表最佳k值。一个简单的双线最小二乘拟合计算用于找到拐点。

我发现该方法非常慢,因为必须为每个k值计算迭代k均值。我还发现k均值在多次运行中效果最好,并在最后选择了最佳方法。尽管每个数据点只有二维,但不能使用简单的勾股距离。因此,这需要大量的计算。

一种想法是跳过每隔k个值(例如)到一半的计算值和/或减少k个均值迭代的次数,然后稍微平滑所得曲线以产生更准确的拟合。我在StackOverflow -IMHO上问过这个问题,平滑问题仍然是一个开放的研究问题。


4

您需要重新考虑k均值的作用。它试图找到将数据集划分为单元的最佳Voronoi分区。Voronoi细胞是形状奇怪的细胞,是Delaunay三角剖分的正交结构。k

但是,如果您的数据集实际上不适合Voronoi方案怎么办?

kk

k


3
尽管在第一段中对K-means的描述是正确的,但它可能会误导某些人将这种方法等同于基于原始数据的 Voronoi分区 事实并非如此:分区是基于聚类平均值的位置,它可能与(通常不会)与任何原始数据一致。
ub

3

总体而言,您可以选择两条不同路径中的群集数量。

  1. 知识驱动:您应该从业务角度了解一些需求。例如,您正在聚集客户,在获得这些客户之后,您应该问自己,下一步我该怎么做?可能会对不同的群集有不同的处理方式吗?(例如,通过电子邮件或电话投放广告)。那您打算计划多少种治疗方法?在此示例中,您选择说100个群集不会太有意义。

  2. 数据驱动:群集数量过多,而群集不足,则数量不足。您始终可以将数据分成两半,然后运行交叉验证以查看有多少个集群是好的。注意,在群集中,您仍然具有丢失功能,类似于监督设置。

最后,您应该始终将现实世界中的知识驱动和数据驱动结合在一起。


2

正如没有人指出的那样,我想我会分享这一点。有一种称为X均值的方法(请参阅此链接),该方法使用贝叶斯信息准则(BIC)估计适当的聚类数。本质上,这就像尝试使用具有不同Ks的K均值,为每个K计算BIC并选择最佳K。此算法可以有效地做到这一点。

还有一个weka实现,可以在此处找到其详细信息。


0

另一种方法是使用一种进化算法,该算法的个体具有不同长度的染色体。每个人都是一个候选解决方案:每个人都携带质心坐标。质心的数量及其坐标不断变化,以求得最佳聚类评估得分的解决方案。

本文介绍了该算法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.