用Louvain算法进行聚类
有一些方法可以使用Girvan-Newman算法来最大化要通过聚类算法划分的社区数时的模块化\\" Q \\"。对于聚类,可以使用Newman算法进行社交图聚类。很容易理解
其中,有Louvain算法,该算法目前需要相对较少的计算量。
单击此处查看论文
Blondel,Vincent D.等人\\"大型网络中社区的快速展开。\\"统计力学杂志:理论与实验2008.10(2008):P10008。
使用python-louvain(python中的louvain算法库)对networkx图进行聚类。
安装
我能够在我的环境中使用pip进行安装(Python 2.7.10,pip 8.1.2)。
点安装
1 | sudo pip install python-louvain |
或
下载源代码
安装
1 | python setup.py install |
库导入为
进口
1 | import community |
可以通过
完成
聚类
这次,我们将与上一篇文章中创建的独立艺术家的图形进行聚类,为简单起见,我们将2015年的数据作为目标,节点数为8523,边数为61,619。它是一个无向图,由于尚未执行详细的聚类分析,因此不知道聚类由什么组成,因此,在通过Louvain算法找到最佳聚类数的同时,它似乎是聚类的最佳选择。
如果按原样绘制图形,它将是以下图形。
python-louvain的基本聚类计算可以通过community.best_partition(nxGraph)完成,并将以以下dict格式返回。
1 2 3 4 5 6 | In [1]: community.best_partition(G) Out[1]: {'nodelabel': int(community), 'nodelabel': int(community), 'nodelabel': int(community), ... |
将图形聚类并绘制图形,通过参考示例来创建要绘制的函数。
clustering.py
1 2 3 4 5 6 7 8 9 10 11 12 | import networkx as nx import community def clusteringplot(G): partition = community.best_partition(G) size = float(len(set(partition.values()))) pos = nx.spring_layout(G) count = 0. for com in set(partition.values()): count += 1. list_nodes = [nodes for nodes in partition.keys() if partition[nodes] == com] nx.draw_networkx_nodes(G, pos, list_nodes, node_size=150, node_color = str(count/size)) plt.show() |
输出图如下,按簇着色。
然后聚类
如此处所述,聚类是一种任意的事物,可以确定的是,重要的是聚类的组成含义,聚类的数量和使用louvain算法的聚类的数量。组成,我们一定不要忘记分析组成部分并弄清它们的含义。
参考
使用Python和CytoScape-Qiita进行聚类和可视化