转自:https://blog.csdn.net/aspirinvagrant/article/details/45599071

GN算法

本算法的具体内容请参考Finding and evaluating community structure in networks(Newman and Girvan)。

重要概念

边介数(betweenness):网络中任意两个节点通过此边的最短路径的数目。

GN算法的思想:

在一个网络之中,通过社区内部的边的最短路径相对较少,而通过社区之间的边的最短路径的数目则相对较多。下图中展示了变得强度以及边介数在现实网络中的分布情况。GN算法是一个基于删除边的算法,本质是基于聚类中的分裂思想,在原理上是使用边介数作为相似度的度量方法。在GN算法中,每次都会选择边介数高的边删除,进而网络分裂速度远快于随机删除边时的网络分裂。

GN算法的步骤如下: 
(1)计算每一条边的边介数; 
(2)删除边界数最大的边; 
(3)重新计算网络中剩下的边的边阶数;
(4)重复(3)和(4)步骤,直到网络中的任一顶点作为一个社区为止。

GN算法示例:

GN算法计算边界数的时间复杂度为 O(m*n),总时间复杂度在m条边和n个节点的网络下为 O(m2*n)。
GN算法的缺陷:
(1)不知道最后会有多少个社区;
(2)在计算边介数的时候可能会有很对重复计算最短路径的情况,时间复杂度太高;
(3)GN算法不能判断算法终止位置。
为了解决这些问题,Newman引入了模块度Q的概念,它用来一个评价社区结构划分的质量。网络中的社区结构之间的边数并不是绝对数量上的少,而是应该比期望的边数要少。关于模块度的概念请参考社区划分的标准--模块度。

GN算法具体实现借助基于R的图挖掘库igraph。
数据集为Karate数据集:
Zachary空手道俱乐部成员关系网络是复杂网络、社会学分析等领域中最常用的一个小型检测网络之一。从1970到1972年,Zachary观察了美国一所大学空手道俱乐部成员间的社会关系,并构造出了34个成员,78条成员关系的社会关系网。两个成员经常一起出现在俱乐部活动之外的其他场合,就认为两个成员间有边。该俱乐部因为主管(节点34)与教练(节点1)之间的争执而分裂成2个各自为核心的小俱乐部。结构如下图所示。具体请参考An information flow model for conflict and fission in small groups。

GN算法的R分析代码

> library("igraph")
> karate  <-  graph.famous("Zachary")
> ebc <- edge.betweenness.community(karate)
> ebc
Graph community structure calculated with the edge betweenness algorithm
Number of communities (best split): 5
Modularity (best split): 0.4012985
Membership vector:[1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4
> modularity(ebc)
[1] 0.4012985
> membership(ebc)[1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4
> plot(ebc,karate)

Newman快速算法

本算法的具体内容请参考 Fast algorithm for detecting community structure in networks(Newman) 。

GN算法通过模块度可以准确的划分网络,但它只适用于中小型规模的网络。Newman提出一种基于贪心的快速社区发现算法,算法的基本思想是:首先将网络中的每个顶点设为一个单独社区,然后选出使得模块度Q的增值最大的社区对进行合并;如果网络中的顶点属于同一个社区,则停止合并过程。整个过程是自底向上的过程,且这个过程最终得到一个树图,即树的叶子节点表示网络中的顶点,树的每一层切分对应着网络的某个具体划分,从树图的所有层次划分中选择模块度值最大的划分作为网络的有效划分。

设网络有n个节点,m条边,每一步合并对应的社区数目为r,组成一个r*r矩阵e,矩阵元素eij表示社区i中的节点与社区j中节点之间连边的数目在网络总变数的百分比。

主要步骤:

(1) 初始化网络,开始网络有n 个社区,初始化的eij和ai为:

(2)依次按照∆Q的最大或者最小的方向进行合并有边相连的社区对,并计算合并后的模块度增量∆Q:

(3)合并社区对以后修改对社区对称矩阵e 和社区i和j对应的行列;

(4)重复执行步骤(2)和(3),不断合并社区,直至整个网络合并成一个社区为止。

Newman快速算法的R分析代码

>  karate  <-  graph.famous("Zachary")
>  fc  <-  fastgreedy.community(karate)
>  dendPlot(fc)

参考资料:

Social and Information Network Analysis Jure Leskovec, Stanford University





社区发现(二)--GN相关推荐

  1. 社区发现算法——GN算法与FN算法

    GN算法 本算法的具体内容请参考Finding and evaluating community structure in networks(Newman and Girvan). 重要概念 边介数( ...

  2. 文献记录(part80)--基于平均互信息的最优社区发现方法

    学习笔记,仅供参考,有错必纠 关键词:AMI-COPRA 算法 ;AMI-GN 算法 ;平均互信息 ;AMI 方法 ;社区发现; 基于平均互信息的最优社区发现方法 摘要 本文提出一种基于平均互信息的最 ...

  3. 利用GN算法进行社区发现

    利用GN算法进行社区发现 算法原理 评价方法 实验结果 一种高效实现 算法原理 这个算法是这样做的.根据边的重要性将边一条一条的删去,那么随着边的删除,那些节点也会慢慢变成独立的子连通图.如下图: 所 ...

  4. 深度学习助力网络科学:基于深度学习的社区发现最新综述

    来源:AMiner科技 论文题目: A Comprehensive Survey on Community Detection with Deep Learning 论文网址: https://arx ...

  5. fastunfolding算法_社区发现算法综述—part1

    目前我能在arxiv上找到的最新的关于社区发现算法系列的综述文了. 正文从这里开始: 2.2 社区发现 现代网络在规模.多样性和复杂性上呈指数增长. 由于网络的变化,各种各样呈现出网络结构的不同类型的 ...

  6. 标签传播算法_复杂网络社区发现算法汇总

    社区发现 这篇文章汇总了一些常见的社区发现概念和算法,包括 Modularity Q Fast Unfolding(Louvain Algorithm) LPA SLPA KL算法 GN算法 社区: ...

  7. 社区发现算法 - Fast Unfolding(Louvian)算法初探

    1. 社团划分 0x1:社区是什么 在社交网络中,用户相当于每一个点,用户之间通过互相的关注关系构成了整个网络的结构,在这样的网络中,有的用户之间的连接较为紧密,有的用户之间的连接关系较为稀疏,在这样 ...

  8. 【深度学习】最新「深度学习社区发现」综述论文,174篇文献概述六大类方法(含Github资源)...

    | 作者:Xing Su | 单位:麦考瑞大学 | 研究方向:人工智能与数据科学 社区发现能够揭示各类网络中成员的特征与联系,在网络分析中具有重要意义.近年来,深度学习技术在发现社区结构时,以处理高维 ...

  9. 社区发现(一)--算法综述

    基础概念简介:https://baike.baidu.com/item/%E7%A4%BE%E5%8C%BA%E5%8F%91%E7%8E%B0%E7%AE%97%E6%B3%95/19460396 ...

最新文章

  1. 分析 JDK 源码丨Java Thread
  2. html编写的过程中,为什么font设置属性的时候,第二个属性不起作用
  3. python 第三方包自动导入_7行代码,彻底告别python第三方包import导入问题!
  4. Android3个页面跳转代码,从零开始Android组件化改造(三) - 页面跳转与路由组件...
  5. 自己实现一些JQuery插件-----------------------------------(一)
  6. C++:43---派生类向基类转换、静态/动态的类变量
  7. 深度好文:破“SCI至上”,科研资源配置怎么调整
  8. 背景调查 跳槽_分享 | 录用背景调查,查的到底是什么?
  9. 岗位多多,招聘 23人 | 中国农业科学院深圳农业基因组研究所诚聘博士后和科研人员...
  10. OpenShift 4 之获取全部CRD用户资源定义对象
  11. 剑指offer (01):赋值运算符函数 (C++ 实现)
  12. pb 导出文件 日期格式_「案例分享」ERP系统导出数据注意事项
  13. uniapp自定义字体图标、使用阿里矢量图标库
  14. powerbuilder mysql_powerbuilder+mysql5.0的连接过程 | 学步园
  15. android7.0root工具,KingRoot全球实现Android 7.0一键 Root
  16. 记录一次China GT比赛历程
  17. 决胜B端(一)概述篇-走进B端
  18. Python5.操作excel表格 xlrd库与excel的com接口和openpyxl库
  19. 如何在计算机上增加一个磁盘分区,win10系统额外新增加一个硬盘分区的详细办法...
  20. Android 禁用电源键音量键与模拟

热门文章

  1. android audio arch
  2. Android的Input流程分析(好文)
  3. Android 匿名共享内存C接口分析
  4. python3.7中Gluonts与Mxnet安装问题
  5. AVAssetWriter写h264数据
  6. Xcode 4-PBXcp error修复-No such file or directory
  7. VALSE学习(十五):网络搜索结构-NAS
  8. threadlocal内存泄露_深入理解 ThreadLocal
  9. windows查看器无法打开图片_Win7自带图片查看器异常
  10. 一加6屏幕测试代码_一加 7的普通版与Pro/参数对比