如何判断数据是否足够“聚类”以使聚类算法产生有意义的结果?


78

您怎么知道您的(高维)数据是否表现出足够的聚类,以便kmeans或其他聚类算法的结果实际上有意义?

特别是对于k均值算法,对于实际的聚类结果有意义(而不是虚假的),应该减少集群内方差多少?

当绘制数据的降维形式时,聚类是否应该明显,而如果无法可视化聚类,则kmeans(或其他方法)的结果是否没有意义?


1
手写数字作出集群一个很好的测试:人们所期望的10完全分离的集群,但这个说明在k = 10没有膝盖可言,至少在64D欧几里德度量。
denis


2
这个问题在一定程度上与如何检查聚类结果的有效性以及如何选择“更好”的方法有关。参见例如stats.stackexchange.com/q/195456/3277
ttnphns

Answers:


77

特别是关于k均值,您可以使用Gap统计信息。基本上,这个想法是基于平均散度与相比于越来越多的聚类的参考分布计算聚类度量的优度。可以在原始论文中找到更多信息:

Tibshirani,R.,Walther,G.和Hastie,T.(2001)。通过差距统计估计数据集中的簇数。JR统计员。Soc。B,63(2):411-423。

我对一个相关问题的答案突出了其他一般有效性指标,这些指标可用于检查给定数据集是否表现出某种结构。

如果您对只有噪声的情况一无所知,那么一种好方法是使用重采样并研究群集的稳定性。换句话说,对数据进行重新采样(通过引导程序或通过向其添加少量噪声),并根据Jaccard相似度来计算所得分区的“紧密度” 。简而言之,它允许估计在数据中恢复相似簇的频率。在fpc R软件包中,该方法很容易获得clusterboot()。它采用原始数据或距离矩阵作为输入,并允许应用多种聚类方法(分层,k均值,模糊方法)。在链接的参考文献中讨论了该方法:

Hennig,C.(2007)聚类稳定性的聚类评估计算统计与数据分析,52,258-271。

Hennig,C.(2008)溶出点和隔离鲁棒性:通用聚类分析方法的鲁棒性标准多元分析杂志,99,1154-1176。

以下是使用k-means算法的小规模演示。

sim.xy <- function(n, mean, sd) cbind(rnorm(n, mean[1], sd[1]),
rnorm(n, mean[2],sd[2]))
xy <- rbind(sim.xy(100, c(0,0), c(.2,.2)),
            sim.xy(100, c(2.5,0), c(.4,.2)),
            sim.xy(100, c(1.25,.5), c(.3,.2)))
library(fpc)
km.boot <- clusterboot(xy, B=20, bootmethod="boot",
                       clustermethod=kmeansCBI,
                       krange=3, seed=15555)

在这个人工(且结构良好)的数据集中,结果非常肯定,因为三个聚类(krange)均未在整个样本中溶解,并且所有聚类的平均聚类Jaccard相似度均大于0.95。

以下是20个引导程序样本的结果。可以看出,统计单位倾向于保持分组在同一群集中,只有介于两者之间的那些观察例外。

在此处输入图片说明

当然,您可以将此想法扩展到任何有效性指标:通过自举选择新的一系列观察值(带替换值),针对以下范围计算统计量(例如,轮廓宽度,同色相关性,休伯特伽玛,在平方和之内)。群集编号(例如2到10),重复100或500次,然后查看统计数据的箱线图,它是群集编号的函数。

这是我使用相同的模拟数据集得到的结果,但是使用了Ward的层次聚类并考虑了cophenetic相关性(用于评估距离信息在结果分区中的再现程度)和轮廓宽度(一种用于评估集群内部同质性和群集分离)。

数据之间的相关关系从0.6267到0.7511,中位数为0.7031(500个引导程序样本)。当我们考虑3个簇时,轮廓宽度似乎最大(中位数0.8408,范围0.7371-0.8769)。

在此处输入图片说明


非常感谢您提供翔实的答案!听起来好像clusterboot正是我想要的。也感谢您包含链接。
xuexue 2011年

1
一些魔术数字可以解释轮廓值:stats.stackexchange.com/a/12923/12359
Franck Dernoncourt 2013年

1
您用来在gif中建立这些图表的命令是什么?
特拉维斯·海特

2
@Travis将图像另存为单独的PNG文件,然后使用ImageMagick转换为动画GIF文件。另请参阅这篇文章
chl

10

快速可视化高维数据是否表现出足够聚类的一种方法是使用t分布随机邻居嵌入(t-SNE)。它将数据投影到某个低维空间(例如2D,3D),并且在保持群集结构(如果有)方面做得很好。

例如MNIST数据集

在此处输入图片说明

Olivetti面临数据集:

在此处输入图片说明


1
有没有办法在R中应用人脸(或任何图像)?
特拉维斯·海特

1
@TravisHeeter我不知道
Franck Dernoncourt

3
不要将tSNE投影数据聚类。参见,例如,以下答案:stats.stackexchange.com/a/264647/7828
Anony-Mousse

9

当然,从视觉上辨别出可绘制的维数中的聚类的能力对于聚类算法的有用性是一个令人怀疑的标准,尤其是如果这种降维是独立于聚类本身完成的(即:徒然地尝试找出是否集群将起作用)。

实际上,聚类方法在找到人眼/大脑看不到聚类的聚类中具有最高价值。

简单的答案是:进行聚类,然后找出它是否有效(使用您感兴趣的任何标准,另请参阅@Jeff的答案)。


1
是的,聚类不一定是圆点的好组合,这基本上就是kmeans所假设的。
韦恩

@chl您是否用R制作了此动画图像?
斯特凡·洛朗

7

结果什么时候有意义?特别是k均值结果?

事实是,k均值优化了特定的数学统计量。没有与此相关的“有意义的”。

特别是在高维数据中,第一个问题应该是:欧几里得距离是否仍然有意义?如果不是,请不要使用k均值。欧几里得距离在物理世界中很有意义,但是当您拥有其他数据时,它很快就会失去意义。特别是,当您人为地将数据转换为向量空间时,是否应该将其设为欧几里得呢?

如果您使用经典的“旧的,忠实的”数据集并对其进行k-均值而不进行归一化,但是使用纯欧几里得距离,则它已不再有意义。EM实际上使用某种形式的“局部群集”马哈拉诺比斯距离,其效果会更好。尤其适用于比例尺非常不同的轴。

顺便说一句,k-means的一个关键优势在于,无论它看起来如何,它实际上总是会分区数据。您可以使用k均值将均匀噪声划分为k个簇。可以断言,k均值聚类没有意义。或者一个可以接受的条件是:用户希望对数据进行分区以最小化平方的欧几里得距离,而无需使聚类“有意义”。


@ Anony-Mousse以及“将均匀噪声划分为k个簇”的用例?
CodeFarmer

空无一人。关键是,k均值无关紧要,它将平均数据划分为“簇”,即,它会产生无意义的簇。
Anony-Mousse

6

我最近才开始使用聚类算法,因此希望有更多知识的人可以提供更完整的答案,但是这里有一些想法:

我确定您知道,“有意义”是非常主观的。因此,群集是否足够好完全取决于您为什么首先需要群集。如果您要预测组成员身份,那么任何聚类都可能比偶然做的更好(并且不会更糟),因此结果在某种程度上应该有意义。

如果您想知道此群集的可靠性,则需要一些度量标准进行比较。如果您拥有一组具有已知成员身份的实体,则可以使用判别分析来查看预测的效果。如果您没有一组具有已知成员资格的实体,则必须知道字段中集群的典型差异。具有刚性类别的实体的物理属性可能比人类的心理测量数据具有更低的组内方差,但这不一定会使聚类变得“更糟”。

您的第二个问题涉及“我应该选择k的哪个值?” 同样,这里没有硬性答案。在没有任何先验类别集合的情况下,您可能希望最小化群集数,同时还要最小化平均群集方差。一种简单的方法可能是绘制“聚类数量”与“平均聚类方差”的关系图,然后寻找“弯头”-添加更多聚类对聚类方差不会产生重大影响。

我不会说k-means的结果如果无法可视化就毫无意义,但是当群集在视觉上显而易见时,它肯定会吸引人。同样,这又引出了一个问题:为什么需要进行群集,以及需要变得多么可靠?最终,这是一个需要根据数据使用方式回答的问题。


3

要判断集群是否有意义,您可以运行一种算法来计算集群数量,并查看其输出是否大于1。

ķķ

ķķ

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.