重叠社区发现CPM算法

10 篇文章 0 订阅
2 篇文章 0 订阅

重叠社区发现CPM算法

示例

之前的推送介绍了几种非重叠社区算法:
【社区发现】Fast-Unfolding算法Python实现
【社区发现】FN算法实现优化,效率更快
【社区发现】FN算法Python实现
非重叠就是指每个节点都将会被划分到唯一的一个社区,今天将介绍一种重叠社区发现算法,重叠社区简单的说就是一个节点可能属于多个社区,例如,你本科的社交圈可以看做一个社区,你研究生的社交圈可以看做一个社区,那么可以认为你同时属于这两个社区。如下图,是某位同学的微博关系网,红色点为该同学,蓝色点为他关注的人,绿色的点为二级关注(他关注的人的关注)。
在这里插入图片描述

通过整理,可以明显看出他的两个社区圈(左边四个蓝色点和右边八个蓝色的点)。
在这里插入图片描述

而今天介绍的CPM(Clique Percolation Method)算法则是重叠社区发现算法的一种基础算法。下图是重叠社区的示意图:
在这里插入图片描述

去看原文

算法介绍

在介绍算法原理时,首先需要弄清楚一个概念:团或派系(Clique),Clique是指完全子图,即在同一Clique中的所有节点两两都相连。

该算法首先会寻找出网络中所有的极大团,可采用Bron-Kerbosch算法来实现。
然后在这些极大团中,通过clique-clique重叠矩阵进行标准成分分析来构建k派系社区(k-clique-communities )。在这个clique-clique重叠矩阵中的每行每列分别代表识别的极大团,矩阵对应的值表示两个clique共享节点的个数。当需要构建k派系社区时,参数k用来筛选clique节点重叠的个数,当非对角线的值小于k-1时则置为0,当对角线的值小于k时则置为0。
在这里插入图片描述
例如,上图有6个cliques,分别定义为:

A:[1,2,3,4]
B:[2,4,6]
C:[2,5,6]
D:[4,6,7,8]
E:[4,6,8,9,10]
F:[3,4,9,10]

Python实现及结果

# -*- coding: utf-8 -*-
# @Author: 武辛
# @Email: geo_data_analysis@163.com
# @Note: 如有疑问,可加微信"wxid-3ccc"
# @All Rights Reserved!

k = 4
if __name__ == '__main__':
  # plot network
  G = nx.read_edgelist("network.txt", create_using = nx.Graph())
  pos = nx.spring_layout(G)
  nx.draw(G, pos, with_labels = True, font_weight = 'bold')
  # plt.show()
  plt.savefig("test.png", phi = 300)

  start_time = time.time()
  network = load_network("network.txt")
  communities = find_overlap_community(network, k)
  print("Find %d communities %s with %.2f seconds" % (len(communities), communities, time.time() - start_time))
6 cliques found!
Find 2 communities [set([1, 2, 3, 4]), set([3, 4, 6, 7, 8, 9, 10])] with 0.00 seconds

在这里插入图片描述
原文有源码,更多内容,请关注地学分析与算法。
在这里插入图片描述

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值