是否存在k均值中没有最优k的情况?


11

这在我心中至少存在了几个小时。我试图为k-means算法(具有余弦相似性度量)的输出找到最佳k,因此最终将失真作为簇数的函数进行了绘制。我的数据集是在600维空间中的800个文档的集合。

据我了解,在此曲线上找到拐点或肘点应该至少告诉我大约需要将数据放入的簇数。我把图放在下面。通过使用最大二阶导数测试获得绘制红色垂直线的点。完成所有这些操作之后,我陷入了一个简单得多的难题:这张图告诉我有关数据集的什么信息?

它是否告诉我不值得进行聚类并且我的文档缺乏结构,或者我需要设置一个很高的k?尽管有一个奇怪的事情,就是即使k很小,我也看到类似的文档被聚集在一起,所以我不确定为什么要得到这种曲线。有什么想法吗?

在此处输入图片说明


2
老实说,我不明白的是,您如何能够将k-means聚类与邻近矩阵输入一起使用(以及余弦!)。K均值聚类需要输入原始数据(对象X变量),并且在内部以欧式距离进行运算。
ttnphns 2011年

2
@ttnphns:我希望我理解您的观点,但是据我所知,我们可以对k均值使用任何距离度量,不是吗?我正在Python中执行此操作,但看起来甚至还有一个库可用于R:cran.r-project.org/web/packages/skmeans/index.html输入的不是接近矩阵,而是terms x document执行奇异向量后获得的分解。如果我弄错了,请纠正我。
传奇

我必须承认,基于余弦测度的球形k均值聚类对我来说是新的。我希望有一天能阅读更多有关它的信息。
ttnphns 2011年

@ttnphns:谢谢你回来。只是想确保我不会同时使用苹果和橙子:)
传奇

未修改的k均值仅对 -Norms有意义。因为它计算均值向量,但对于其他距离函数而言,这不是适当的ML估计。Lp
已退出–Anony-Mousse 2011年

Answers:


12

在大多数情况下,我会以为这样的图基本上意味着数据中没有聚类结构。但是,在这样的非常高的维度上进行聚类比较棘手,因为对于欧几里得距离度量,所有距离都倾向于随着维度数量的增加而相同。请参阅 Wikipedia页面,以获取有关该主题的一些论文的参考。简而言之,问题可能只是数据集的高维度。

这本质上是“维数的诅咒”,看到这个维基百科页面,以及。

可能感兴趣的论文是Sanguinetti,G.,“减少聚类数据集的维数”,IEEE模式分析和机器智能交易,第1卷。30号 3,第535-540页,2008年3月(www)。这有点像LDA的无监督版本,它寻找强调簇结构的低维空间。也许您可以在执行k均值之前将其用作特征提取方法?


哎呀,对不起。我应该提到我正在使用余弦相似度。
传奇

我认为维数的诅咒很有可能也适用于余弦相似度。基本上说,随着维数的增加,您需要(最坏的情况)以指数方式增加模式来定义分布。在有效地进行聚类时,要识别代表子种群的分布,因此高维聚类在本质上是棘手的。
Dikran有袋动物2011年

+1感谢您的链接。我将通过它并返回。在应用k均值以减少维数之前,我在原始矩阵上应用了SVD。
传奇

3

您如何精确使用余弦相似度?这就是所谓的球形K均值吗?您的数据集非常小,因此我将其可视化为网络。为此,很自然地使用相似性(例如,余弦相似性或Pearson相关性),应用截止值(仅考虑高于特定相似性的关系),然后在Cytoscape或BioLayout中将结果视为网络。这对于了解数据很有帮助。其次,我将计算数据矩阵的奇异值,或经过适当转换和标准化的矩阵(以某种形式获得的文档-文档矩阵)的特征值。聚类结构应(再次)在特征值或奇异值的有序列表中显示为跳跃。


+1感谢您的指导。我不知道Cytoscape。我会尝试的。是的,看起来像余弦相似的k均值被称为球形k均值。在应用SVD并减少尺寸数量后,我应用了该k均值。我减少维数的方法是使用方差规则(选择占原始数据中95%的方差的奇异值)。
传奇

如果您不介意,您可以指向一个教程来解释如何执行此操作(或至少是这样的操作)。生成矩阵后,是否可以将其导出,然后将其导入Cytoscape并执行您的建议?我很好奇的是Cytoscape是否具有用于余弦相似度的内置方法,还是我必须预先计算一些数据格式并将其作为输入?
传奇

当我使用这些程序时,我从外部计算所有成对的相似度,按阈值过滤,并生成格式为<label1> <label2> <similarity>的文件。两者都应该能够读取该输入。我认为在BioLayout中必须有一个.txt后缀;在CytoScape中使用“从表导入”。
micans

明白了 我会做的,很快就回来。再一次感谢你。
传奇

抱歉,您的问题很愚蠢,但我确实将数据的格式设置为<label1> <label2> <similarity>,但无法弄清楚如何将其准确导入。我从表做了File-> Import-> Network,并选择了源列和目标列。我将交互设置为默认设置。但是我应该如何导入边缘权重以及边缘呢?请问您有什么建议吗?
传奇

2

通常是的,k均值可能会收敛到非常不同的解决方案,这些解决方案可能被认为不合适。对于形状不规则的簇尤其如此。

获得更多的直觉后,您还可以尝试另一种可视化方法:对于k均值,您可以使用Graphgrams使用k-means可视化多个运行(请参阅WEKA Graphgram程序包-最好由程序包管理器获得,或在此处。在这里找到。


1

如果我正确理解该图,它是簇数的图,x轴上的K,y轴上的簇内距离?

因为您的K均值目标函数是使WCSS最小化,所以该图应始终单调递减。随着添加更多群集,群集中各点之间的距离将始终减小。这是模型选择的基本问题,因此您需要运用一些复杂性。

也许尝试一下Gap统计数据:www-stat.stanford.edu/~tibs/ftp/gap.ps或其他类似的数据。

此外,您可能会发现K-means不是适合该工作的工具。您希望找到几个集群?将方差规则用于降维以进行聚类是不合适的。投影到第一台K-1 PC上是一种适当的预处理措施,请参阅本文:http : //people.csail.mit.edu/gjw/papers/jcss.ps

通过将投影绘制到前两个主要组件上,您可以快速查看这是否正确。如果存在清晰的分隔,则K均值应该可以,否则,您需要研究其他内容。也许是K子空间或其他子空间聚类方法。切记这些方法适用于欧几里得距离。我不确定余弦的变化。

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.