社区划分算法:标签传播算法的python实现过程(7行代码实现)

注意:黄色部分为个人感情抒发,可以不用在意。

1.标签传播算法的具体实现过程由python的一个类库networkx完成。

    由以下语句安装networkx

pip install networkx

2.建立一个典型的社交网络图:Zachary的空手道俱乐部图表

  在networkx内置了空手道俱乐部图

import networkx as nx
G=nx.karate_club_graph()

3.定义标签传播算法函数

输入:一个定义好的图G

输出:社区划分结果,划分结果用二维列表表示,如[[1,2,5],[8,7,9]],节点1,2,5代表一个社区,节点7,8,9代表另一个社区。

from networkx.algorithms import community
def label_propagation_community(G):
    communities_generator = list(community.label_propagation_communities(G))
    m = []
    for i in communities_generator:
        m.append(list(i))
    return m

3.打印划分结果:

g=label_propagation_community(G)
print(g)

建议:在networkx中还有其它的社区划分算法,比如GN算法,CPM算法等,请自行探索。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,需要安装 `networkx` 和 `community` 库。 可以使用以下代码读取Karate数据集并进社团划分: ```python import networkx as nx import community G = nx.karate_club_graph() # GN算法 gn_partition = community.girvan_newman(G) gn_community = tuple(sorted(c) for c in next(gn_partition)) gn_q = community.modularity(nx.karate_club_graph(), gn_community) # Louvain算法 louvain_partition = community.best_partition(G) louvain_community = [] for com in set(louvain_partition.values()): louvain_community.append([n for n in louvain_partition.keys() if louvain_partition[n] == com]) louvain_q = community.modularity(louvain_partition, G) # FN算法 fn_partition = community.asyn_fluidc(G, 2) fn_community = tuple(sorted(c) for c in fn_partition) fn_q = community.modularity(fn_partition, G) # 标签传播算法 label_propagation_partition = community.label_propagation_communities(G) label_propagation_community = tuple(sorted(c) for c in label_propagation_partition) label_propagation_q = community.modularity(label_propagation_partition, G) ``` 其中,`community.girvan_newman` 函数实现GN算法,`community.best_partition` 函数实现Louvain算法,`community.asyn_fluidc` 函数实现FN算法,`community.label_propagation_communities` 函数实现标签传播算法。 `community.modularity` 函数用于计算每个算法对应的Q值。 最终,可以输出每个算法对应的社团划分和Q值: ```python print("GN算法:") print("社团划分:", gn_community) print("Q值:", gn_q) print("Louvain算法:") print("社团划分:", louvain_community) print("Q值:", louvain_q) print("FN算法:") print("社团划分:", fn_community) print("Q值:", fn_q) print("标签传播算法:") print("社团划分:", label_propagation_community) print("Q值:", label_propagation_q) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值