python - 社区层次与重叠的相关性
问题描述
dendo = community.generate_dendrogram(G_fb)
for level in range(len(dendo) - 1) :
print("partition at level", level,
"is", partition_at_level(dendo, level))
所以我在自己的数据上运行上面的代码,发现我的数据级别只有 1。似乎级别是社区的规模,在我的情况下,它们很小。
但是接下来我应该怎么做才能找出重叠的社区,这意味着一个节点可以包含在检测算法的输出中的多个社区中,例如我用于社区检测的 best_partition。
解决方案
我不太确定你在问什么,但如果你想找到网络中不同社区之间重叠的节点,那么有几种算法可以解决这个问题。这是一篇可以帮助您入门的文章:https ://arxiv.org/pdf/1110.5813.pdf 。特别是 CFinder 算法受到了很多关注。在此处列出,您将找到可能有用的算法实现。以下是Tamas为 CFinder 提供的代码:
# CFINDER IMPLEMENTATION
#!/usr/bin/env python
from itertools import combinations
import igraph
import optparse
parser = optparse.OptionParser(usage="%prog [options] infile")
parser.add_option("-k", metavar="K", default=3, type=int, help="use a clique size of K")
options, args = parser.parse_args()
if not args:
parser.error("Required input file as first argument")
k = options.k
g = igraph.load(args[0], format="ncol", directed=False)
cls = map(set, g.maximal_cliques(min=k))
edgelist = []
for i, j in combinations(range(len(cls)), 2):
if len(cls[i].intersection(cls[j])) >= k-1:
edgelist.append((i, j))
cg = igraph.Graph(edgelist, directed=False)
clusters = cg.clusters()
for cluster in clusters:
members = set()
for i in cluster:
members.update(cls[i])
print "\t".join(g.vs[members]["name"])
或者,我相信 NetworkX 有类似的解释,可以在这里找到。
推荐阅读
- javascript - Javascript:数组的元素在数组上的 unshift 方法后消失
- c# - 等待来自多个对象的任务
- odoo - 如何配置灵活的访问规则
- c# - 如何从 getstream.io 获取用户会话令牌?
- javascript - 将 JSON 从节点 js 发送到 jquery 客户端,但它不能
- ios - React Native - 为什么我们将库与 CocoaPods 链接?
- sql - N 对 N 关系,能够显示与任何不相关的项目
- php - Laravel 5.6 类 App\Http\Controllers\PostController 不存在
- neo4j - 如何从网络浏览器连接到 Neo4j
- python - 训练后所有权重变为负数