igraph包里面常用的社区检测算法--以模块度为优化目标

本文介绍了igraph包中多个社区检测算法,包括k_clique、fastgreedy、edge.betweenness等,强调了它们在模块度优化方面的表现,并通过实际应用到karate网络上展示了算法的运用与模块度计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        本文所罗列的社区检测算法主要是igraph包里面的社区检测算法及对网络进行社区划分的应用,便于对社区检测方向有研究兴趣的小伙伴来研究。

1、社区检测算法目录:算法后面的[]里面的内容是提出该算法的人和年份
#(1) nx.k_clique_communities(G, 3)     [Newman 2005]  应用较多,性能一般
#(2) fastgreedy.community           [Clauset et al., 2004] (modularity optimization method)   性能相对较好
#(3) edge.betweenness.community           [Newman and Girvan, 2004]   性能比(1)好
#(4) label.propagation.community         [Raghavan et al., 2007]  和GN算法性能差不多
#(5) multilevel.community              [Blondel et al., 2008] (the Louvain method)  性能是这几个算法里面最好的
#(6) walktrap.community           [Pons and Latapy, 2005]

#(7) leading.eigenvector.community         [Newman, 2006]
#(8) infomap.community           [Rosvall and Bergstrom, 2008]   性能适用于大网络,对小网络效果较差
#(9) spinglass.community          [Reichardt and Bornholdt, 2006]
#(10) optimal.community              [Brandes et al., 2008]
#(11) GSA                 [Karaboga, 2009]

         这里关于性能的比较主要是通过个人对网络进行社区检测过程中得出的个人结论,而且对于不同规模的网络,不同算法的性能是不同的,对其感兴趣的可以自己去测试一下。

2、算法的实际应用(本文采用的测试网络主要是karate网络,即空手道俱乐部网络)

(1)K派系算法import networkx as nx
from igraph import*
import matplotlib.pyplot as plt 
import igraph as ig
karate=open('C:\\Users\\Lenovo\\Desktop\\network.txt') 
karate=karate.read()
G = nx.Graph()
liebiao=dolphins.split("\n") # 用回车符分裂字符串
for i in range(0,len(liebiao)-1):
    liebiao1=liebiao[i].split()  # 用空格符分裂‘0’和‘1’
    node1=int(liebiao1[0])   #节点转化为整数
    node2=int(liebiao1[1])
    G.add_edge(node1,node2)
c=list(nx.k_clique_communities(G, 3)) # k=3 

#若只想得到社区划分结果,到这里就可以了,后面的计算只是为了计算模块度值,其他算法中的步骤类似
membership=[]
for i in range(0,len(G)):
   membership.append(0) 
for i in range(0,len(c)):
    nodes=c[i]
    for j in nodes:
        membership[j]=i
origin_edges=nx.to_edgelist(G) 
new_list=[]
for edge_i in range(0,len(origin_edges)):
    node_dict=origin_edges[edge_i]
    new_list.append([node_dict[0],node_dict[1]])
g1=Graph(new_list)   
Q=GraphBase.modularity(g1, membership)
print Q

(2)fastgreedy算法CNM算法
import networkx as nx
from igraph import*
import matplotlib.pyplot as plt
karate=open('C:\\Users\\Lenovo\\Desktop\\network.txt')
karate=karate.read()
G = nx.Graph()
liebiao=karate.split("\n")  #用回车符分裂字符串
for i in range(0,l

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值