gpt4 book ai didi

python - 如何在 python - networkx 包中根据边缘的密度和权重找到网络簇

转载 作者:行者123 更新时间:2023-12-01 03:25:39 24 4
gpt4 key购买 nike

我使用Python包networkx构建了一个网络,每条边都有一个权重,指示两个节点在相关性方面的接近程度。

如果有一个内置算法可以返回聚类图,并将每个节点分配给它的聚类 ID(1 到 k),那就太理想了。

如果它可以根据边缘的权重进行聚类,那就更好了,但不是关键......

知道如何做到这一点吗?

最佳答案

您可能想查看包 python-louvain 。有了它,您可以使用函数 best_partition 检测图表中的社区。从功能描述来看:

Compute the partition of the graph nodes which maximises the modularity (or try..) using the Louvain heuristices

This is the partition of highest modularity, i.e. the highest partition of the dendrogram generated by the Louvain algorithm.

在我的示例中,我计算了 karate_club_graph 的社区。 (请注意,即使我的图表没有加权边,我也将 best_partitionweight 关键字一起使用 - 我只是展示在您的情况下如何使用该函数.)

import networkx as nx
import community

G = nx.karate_club_graph()
p = community.best_partition(G, weight='weight')
print(p)

输出:

{0: 0, 1: 0, 2: 0, 3: 0, 4: 1, 5: 1, 6: 1, 7: 0, 8: 2, 9: 0, 10: 1, 11: 0, 12: 0, 13: 0, 14: 2, 15: 2, 16: 1, 17: 0, 18: 2, 19: 0, 20: 2, 21: 0, 22: 2, 23: 3, 24: 3, 25: 3, 26: 2, 27: 3, 28: 3, 29: 2, 30: 2, 31: 3, 32: 2, 33: 2}

输出是一个字典(键=节点,值=分区)。分区从 0 到 k-1。如果您需要它们从 1 到 k,您只需将字典值增加到 +1 即可。

for k, v in p.items():
p[k] = v + 1

关于python - 如何在 python - networkx 包中根据边缘的密度和权重找到网络簇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com