我构建了一个协作过滤算法(余弦,项目项)来揭示项目之间的关系。最后,我的结果数据如下所示,
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并尝试了一些步骤,但我甚至不理解它们的输入数据格式。
你可以告诉我路吗? :)答案 0 :(得分:0)
图形聚类的主题非常广泛,并且有许多不同的方法,每种方法都有自己的特殊细节。有关该主题的广泛处理,请参阅this review。
但是,如果您正在寻找可以帮助您入门的内容,并且根据目前提供的说明,您可以尝试使用Centrality来识别群集。具体来说,betweenness centrality(如顶点所定义)将提供按最常用首选项的顺序对图表顶点(表示项目)进行排序的机会(假设您的相似性指的是{ {3}})。
在Python中执行此操作只需要something like this
几行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
现在保持每个节点的中介中心性。要以相反的顺序对那个进行排序(从而得到您的群集"集线器"首先),您可以简单地bc_sorted = sorted(bc.items(),key=lambda x:x[1],reverse=True)
您可以将上述内容用作"翻译"的模板。另一种语言的代码,例如R.事实上,有一个等效的Python包(Networkx),它已经为已经实现的节点提供了igraph指标,还有一个betweenness centrality,它可以让你读取你的数据磁盘。也就是说,让你开始的等效R代码与这三行并没有太大的不同。
希望这有帮助。