图聚类工具

Graph Clustering Tool

我构建了一个协同过滤算法(余弦、项目-项目)来揭示项目之间的关系。最后我的结果数据是这样的,

itemNo relatedItemNo    similarityValue
1546301 1543903 0.10767638
1546301 1530836 0.093250481
1546301 1479721 0.10767638
1557616 1573636 0.121267813
1557616 1558024 0.161690417
1086551 1437760 0.127000127
1086551 1552321 0.083333333
1086551 1578137 0.127000127
1086551 1560842 0.081110711
....... ....... ...........

现在我想用它做聚类。使用项目之间的相似度值,我想得到一些集群,说 1546301、1479721、1543903 在集群 A 中; 1086551,1552321, 1560842 在集群 B.

我该如何处理?我是数据挖掘的新手,所以即使是简单的工具也很难使用。

我知道这叫做图形聚类,我已经下载了 igraph for r,安装了 cluto 并尝试了一些步骤,但我什至不了解它们的输入数据格式。

你能给我指路吗? :)

图聚类的主题非常广泛,有很多不同的方法,每种方法都有自己的特殊细节。有关该主题的详细处理,请参阅 this review

但是,如果您正在寻找可以帮助您入门的东西,并且根据目前提供的描述,您可以尝试通过使用 Centrality. Specifically, betweenness centrality (as defined for vertices) would provide an opportunity to sort the vertices of the graph (representing items) by order of most commonly preferred items (assuming that your similarity refers to something like this).

来识别集群

在 Python 中执行此操作只需使用 Networkx

几行即可
import networkx
G = networkx.read_edgelist("myfile.csv", delimiter="\t") #Assuming that your file is tab separated here. If it is coma separated then substitute \t for a ,. Also, it would be good to get rid of the header (i.e. the first line of the CSV.
bc = networkx.betweenness_centrality(G)

变量bc现在保存每个节点的介数中心性。要以相反的顺序对那个进行排序(因此首先得到你的集群 "hubs"),你可以简单地 bc_sorted = sorted(bc.items(),key=lambda x:x[1],reverse=True)

您可以使用以上内容作为模板 "translating" 将代码转换为另一种语言,例如R. 事实上,有等效的 Python 包(igraph) which does have a betweenness centrality metric for nodes already implemented as well as a Read_Edgelist 可以让您从磁盘读取数据。也就是说,让您入门的等效 R 代码与这些没有太大区别三行。

希望对您有所帮助。