余弦相似度与欧几里得距离(LSA)的K均值


10

我正在使用潜在语义分析来表示较低维空间中的文档语料库。我想使用k均值将这些文档分为两组。

几年前,我使用Python的gensim并编写了自己的k-means算法来做到这一点。我使用欧几里得距离确定了聚类质心,但随后基于与质心的余弦相似度对每个文档聚类了。它似乎工作得很好。

现在,我正在尝试在更大的文档集上执行此操作。K-means没有收敛,我想知道这是否是我的代码中的错误。我最近读到您不应该使用余弦相似度进行聚类,因为k均值仅适用于欧几里得距离。即使正如我提到的那样,它在较小的测试用例中似乎也可以正常工作。

现在,我在LSA维基百科页面上发现了这一点:

可以使用传统的聚类算法(如k均值)和相似度(如余弦)对文档和术语向量表示进行聚类。

那是什么呢?是否可以使用余弦相似度?


这个话题确实在这个网站上徘徊了很长时间。最近的问题:stats.stackexchange.com/q/120085/3277(请参阅此处的其他链接)。十分有趣的是如何实现处理余弦的k均值。如果您在问题中描述您的算法,它将帮助人们回答它。
ttnphns 2014年

@ttnphns我实际上是使用欧几里得距离(每个维度的平均值)生成聚类质心的。但是,然后我根据余弦相似度而不是欧几里得距离将每个文档分配给一个群集。
杰夫2014年

I then assigned each document to a cluster based on cosine similarity-文档和质心之间的余弦?在分配完所有文档后,您将以常规(欧几里得)的方式更新质心,因为空间中文档的坐标是已知的。是这样吗?
ttnphns 2014年

1
H

1
我开始想的是,您可能正在寻找在球面上而不是在空间上执行的k均值。可以这么说,角k均值。我想这是可能的,但我从未阅读或使用过。
ttnphns 2014年

Answers:


4

是的,您可以使用它。问题在于,余弦相似度不是距离,这就是为什么它被称为相似度的原因。尽管如此,由于解释它可以转换为距离这里

实际上,您可以使用任何距离。关于高维空间中距离函数的性质的一个很好的研究(就像在信息检索中通常如此)是关于高维空间中距离度量的惊人行为。它没有比较欧几里得和余弦。

我遇到了这项研究,他们声称在高维空间中,两种距离的行为往往相似。


1
如果它描述了这样的回答可能是一个很好的如何 Yes, you can use it。(将余弦转换为欧几里德距离的想法类似于我的答案吗?)
ttnphns 2014年

我对k均值的理解是不同的。它不一定限于欧几里得距离(stat.uni-muenchen.de/~leisch/papers/Leisch-2006.pdf)。另请参阅我的第二份参考书或此R包(cran.r-project.org/web/packages/cclust/cclust.pdf)。我的意思是真的像Wikipedia网站中那样。一个只需要一个距离函数。他们将其称为“角度相似性”。
jpmuc

1
也许(感谢您分享本文!)。但是,所有这样的k均值“修改”与k均值的不同之处在于,它们不将质心定义为欧氏空间中的算术平均值,因此不应称为 k均值。
ttnphns 2014年

1

欧式距离不适用于比较文档或文档簇。比较文档时,一个关键问题是按文档长度进行归一化。余弦相似度可以实现这种归一化,而欧氏距离则不能。此外,文档通常被建模为多项概率分布(所谓的单词袋)。余弦相似度是JS散度的近似值,后者是统计学上证明相似度合理的方法。文档和余弦的一个关键问题是应该对计数应用适当的tf-idf归一化。如果您使用gensim派生LSA表示,gensim已经做到了。

对于2个集群的用例,另一个有用的观察结果是,由于LSA只是SVD,因此可以获得良好的非随机初始化。您可以通过以下方式进行操作:

  • 仅取每个文档的第一个组件(假设第一个组件是最上面的奇异矢量)。
  • 通过跟踪每个值的文档ID对这些值进行排序。
  • 类别1 =对应于最高值(例如1000(或更多))的文档ID
  • 类别2 =对应于底部的文档ID,例如1000(或更多)个值
  • 只需对每个聚类的向量求平均值,并根据向量长度进行归一化。
  • 现在将k-means应用于此初始化。这意味着只需迭代(1)将文档分配给当前最接近的质心,以及(2)重新分配后平均并归一化新质心

1

是的,通过矢量平均值进行的相同质心更新有效。

参见本文第2.2节中的m = 1情况。对于基本k均值算法,w是权重,权重均为1。

本文利用Cauchy-Schwartz不等式的性质建立了最小化k均值成本函数的条件。

还要记住,余弦相似度不是向量距离。余弦不等式。(这应该是一个很好的搜索词。)因此,当您更新分区时,您正在寻找而arg max不是arg min

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.