基于关系权重的聚类对象聚类算法

时间:2011-12-09 16:27:31

标签: algorithm cluster-analysis

我有n个单词及其相关权重给我一个n * n矩阵。我将把它用于搜索算法,但问题是我需要根据它们的成对关系对输入的关键字进行聚类。所以,假设关键字是{网球,费德勒,温布尔登,伦敦,警察},我们的权重矩阵中包含以下数据:

            tennis  federer  wimbledon  london  police      
tennis        1       0.8       0.6       0.4     0.0
federer       0.8      1        0.65      0.4     0.02
wimbledon     0.6     0.65       1        0.08    0.09
london        0.4     0.4       0.08        1      0.71
police        0.0     0.02      0.09      0.71     1

我需要一个算法将它们聚类成2个集群:{tennis,federer,wimbledon} {london,police}。是否有任何已知的聚类算法可以处理这样的事情?我做了一些研究,似乎K-means算法是用于聚类的最着名的算法,但显然K-means不适合这种情况。 我非常感谢任何帮助。

6 个答案:

答案 0 :(得分:2)

您可以将其视为网络群集问题。使用最新版本的mcl软件(http://micans.org/mcl),您可以执行此操作(我将您的示例称为fe.data)。

mcxarray  -data fe.data -skipr 1 -skipc 1 -write-tab fe.tab -write-data fe.mci -co 0 -tf 'gq(0)' -o fe.cor
   # the above computes correlations (put in data file fe.cor) and a network (put in data file fe.mci).
   # below proceeds with the network.
mcl fe.mci -I 3 -o - -use-tab fe.tab
   # this outputs the clustering you expect. -I is the 'inflation parameter'. The latter affects
   # cluster granularity. With the default parameter 2, everything ends up in a single cluster.

免责声明:我写了mcl和一系列相关的网络加载/转换和分析程序,最近更名为'mcl-edge'。它们都集中在一个软件包中。看到你的例子让我很好奇是否可以使用mcl-edge,所以我很快就测试了它。

答案 1 :(得分:1)

考虑DBSCAN。如果它符合您的需求,您可能希望仔细查看优化版本TI-DBSCAN,它使用三角不等式来降低空间查询成本。

DBSCAN的优点和缺点是discussed on Wikipedia。它将输入数据拆分为一组基数,其基数未知 a priori 。您必须将相似度矩阵转换为距离矩阵,例如将1 - similarity作为距离。

答案 2 :(得分:0)

查看有关信息检索的书籍

http://nlp.stanford.edu/IR-book/html/htmledition/hierarchical-agglomerative-clustering-1.html

它很好地解释了你想要做什么

答案 3 :(得分:0)

对于更相似的单词,您的权重更高,对于更多不同的单词,您的权重更低。聚类算法要求类似的点/单词在空间上更接近,而不同的单词要远离。您应该将矩阵M更改为1-M,然后使用您想要的任何聚类方法,包括k-means。

答案 4 :(得分:0)

如果你有距离矩阵,那么尝试http://en.wikipedia.org/wiki/Single_linkage_clustering似乎很遗憾。手动,我认为你得到以下聚类:

<(>(费德勒,网球),温布尔登)(伦敦,警察)

加入两个主要群体(网球 - 伦敦或者费德勒 - 伦敦)的链接的相似性小于建立这两个群体的任何相似之处:伦敦警察,网球联盟和联邦 - 温布尔登:单链接聚类保证了这一特性,因为它在每个阶段将最近的聚类结合在一起,并且两个主要的组通过找到的最后一个聚类链接。

答案 5 :(得分:0)

DBSCAN(参见其他答案)和OPTICS等后继者显然是一种选择。

虽然示例是关于矢量数据,但算法需要的只是距离函数。如果你有一个相似矩阵,那么可以简单地用作距离函数。

示例数据集可能有点太小,无法产生有意义的结果。如果你只有这么少的数据,任何“层次聚类”都应该是可行的,并为你完成工作。然后,您只需确定最佳群集数量。