algorithm - 基于关系权重对对象进行聚类的聚类算法

标签 algorithm cluster-analysis

我有 n 个词和它们的相关权重,这给了我一个 n*n 矩阵。我打算将其用于搜索算法,但问题是我需要根据成对关系对输入的关键字进行聚类。假设关键字是 {tennis,federer,wimbledon,london,police} 并且我们的权重矩阵中有以下数据:

            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 不适合这种情况。 如果有任何帮助,我将不胜感激。

最佳答案

您可以将其视为网络聚类问题。使用最新版本的 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 来实现,所以我很快就测试了它。

关于algorithm - 基于关系权重对对象进行聚类的聚类算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8448552/

相关文章:

java - 将新实例添加到集群器

python - 在 Python 中使用自定义距离函数对任意对象进行聚类

python - AffinityPropagation .labels_ 与 .predict()

objective-c - 如何在 Objective-C 中检测图像中的 body ?

algorithm - 要插入 [a,b] 中的最小数字数,使得 2 个连续数字的 GCD 为 1

python - 以最小成本包围点的最小圆

cluster-analysis - k-means 集群中可以有重叠吗?

algorithm - 如何通过在scala中映射来制作字符串序列?

algorithm - Kruskal 算法 - 修改为矩阵数据结构?

c++ - 链表中的返回遍历问题