社区发现算法(二)

2023-10-29

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




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

社区发现算法(二) 的相关文章

  • 寻找下一个素数的最佳方法(Java)

    我被要求编写一个程序以最佳方式找到下一个素数 我编写了这段代码 但找不到最佳答案 有什么建议么 public static int nextPrime int input input now find if the number is pr
  • StackOverflowError 计算 BigInteger 的阶乘?

    我正在尝试编写一个Java程序来计算大数的阶乘 它似乎BigInteger无法容纳这么大的数量 下面是我编写的 简单的 代码 public static BigInteger getFactorial BigInteger num if n
  • 如何使 R barplot 上的列标签变为斜体

    这可能是一个简单的问题 但是如何仅将条形图上的列标签设为斜体 而不是斜体x axis标签 但列标签是专门的 到目前为止我的代码是 bp barplot means names arg c CON TRI ylim c 0 120 ylab
  • 如何检查无向图是否有奇数环

    我试图找到一个 O V E 时间算法来检查是否已连接 无向图有或没有奇数环 我正在考虑对图进行广度优先搜索 并尝试将顶点标记为黑色和白色 以便没有两个标记为相同颜色的顶点相邻 是否有任何已知的更简洁的算法可以在线性时间内解决这个问题 你的方
  • 素数生成器算法

    我一直在尝试解决素数生成算法的SPOJ问题 这是问题 彼得想为他的密码系统生成一些素数 帮助 他 你的任务是生成两个给定之间的所有素数 数字 Input 输入以单行中测试用例的数量 t 开始 t Output 对于每个测试用例 打印所有素数
  • 从原点开始在离散 2D 网格上迭代向外螺旋的算法

    例如 这是预期螺旋的形状 以及迭代的每个步骤 y 16 15 14 13 12 17 4 3 2 11 18 5 0 1 10 x 19 6 7 8 9 20 21 22 23 24 其中线条是 x 轴和 y 轴 以下是算法每次迭代 返回
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • Python Pandas:沿一列比较两个数据帧,并返回另一个数据帧中两个数据帧的行内容

    我正在处理两个 csv 文件并作为数据框 df1 和 df2 导入 df1 有 50000 行 df2 有 150000 行 我想将 df2 的 时间 与 df1 求时间差并返回所有列的值 对应相似的行 保存在df3中 时间同步 例如 35
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • 如何将多边形放入另一个多边形内[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有两个多边形 如下图所示 左边是 粗多边形 右边是 最终多边形 现在 我正在寻找算法来将 最终多边形 拟合到 粗糙多边形 内 并具有
  • 什么是“朴素”算法,什么是“封闭式”解决方案?

    我有一些关于描述算法时使用的术语语义的问题 首先 朴素 算法是什么意思 这与给定问题的其他解决方案有何不同 解决方案还可以采取哪些其他形式 其次 我听到很多人提到 封闭式 解决方案 我也不知道这意味着什么 但在尝试解决递归关系时经常会出现
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • heapq.nlargest 的时间复杂度是多少?

    我在看演讲者说 获得t列表中最大的元素n元素可以在O t n 这怎么可能 我的理解是创建堆将是O n 但是复杂度是多少nlargest本身就是O n t or O t 实际的算法是什么 在这种情况下 说话者是错误的 实际成本是O n log
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可
  • 为什么这个算法的Big-O复杂度是O(n^2)?

    我知道这个算法的大O复杂度是O n 2 但我不明白为什么 int sum 0 int i 1 j n n while i lt j sum 即使我们设定了j n n一开始 我们在每次迭代期间递增 i 并递减 j 因此最终的迭代次数不应该比n
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 如何生成类似github的影响图?

    是否有一些程序 或者我错过的一些神奇的 git 插件 可以从 git 存储库获取影响图或类似的东西 而无需通过 github 就数据收集而言 我可以生成图表 我不确定从哪里开始编写自己的代码 我假设有一些标志我可以传递给 git log 来
  • 无法理解Peterson算法的正确性

    我在这里讨论彼得森算法的一个场景 flag 0 0 flag 1 0 turn P0 flag 0 1 turn 1 while flag 1 1 turn 1 busy wait

随机推荐

  • node中使用jsonwebtoken实现身份认证

    在现代web应用中 用户身份认证是非常重要且必不可少的一环 而使用Node js和Express框架 可以方便地实现用户身份认证 而在这个过程中 jsonwebtoken这个基于JWT协议的模块可以帮助我们实现安全且可靠的身份认证机制 可以
  • zabbix语言无法选择中文--zabbix安装配置中文

    You are not able to choose some of the languages because locales for them are not installed on the web server 1 安装wget y
  • 数据结构--二叉排序树

    目录 二叉排序树的定义 二叉排序树的查找 二叉排序树的插入 二叉排序树的构造 二叉排序树的删除 查找效率分析 回顾 二叉排序树的定义 二叉排序树的查找 查找成功的情况 查找失败的情况 二叉排序树的插入 注意 1 二叉排序树不允许出现重复的值
  • Vue3的自定义指令,项目中的运用

    目录 一 什么是自定义指令 1 定义 2 什么时候使用自定义指定 二 Vue3中的自定义指令 1 全局自定义指令 2 组件自定义指令 三 指令钩子 1 钩子 2 钩子参数 四 自定义指令的常见用法 1 添加事件监听 2 操作DOM 一 什么
  • 信息熵与信息增益

    信息熵 information entropy 是度量样本集合纯度 不确定度最常用的指标之一 但要注意 信息熵越小 表示不确定度越低 确定度越高 纯度越高 E n t D
  • element-ui 动态表单实现一行两列

    借鉴element ui的文档 再用el row与el col相结合实现表单一行两列功能 下面是代码
  • 分布式配置管理系统QConf

    分布式配置管理系统QConf 分布式配置管理系统QConf是360公司开源的系统 详见 https github com Qihoo360 QConf 整体架构图如下 资料 1 https github com Qihoo360 QConf
  • 第4章_瑞萨MCU零基础入门系列教程之瑞萨 MCU 源码设计规范

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • 【git】用好 stash,工作超nice

    一 介绍 如果修改后的内容还不想commit 就可以用git stash命令 它会将工作区和暂存区中的修改 也就是还没commit的内容 都会被保存到堆栈里 并在之后恢复到任意指定的分支上 二 应用场景 1 在分支a进行开发feature
  • python统计秒数

    code 1 没有cuda的版本 import time s time time for i in range 100 pass t time time print time sec format t s 2 cuda 同步 torch c
  • DC/DC电路——自举电容(boost)的作用

    DCDC电路中 偶尔存在有自举电容的情况 手册对该电容的定义如下 假如该点的电压低于MOSFET的最小开启电压 MOSFET将保持关断状态 看芯片手册的内部结构 此芯片的MOSFET为N沟道的MOSFET N沟道的MOSFET开通电压VGS
  • 第36.4节 动画-路径动画中的角度控制问题

    目录 本节功能 关键点 所有代码 本节功能 本节创建了一个高高低低的三维的路径 在楼顶和地面之间穿梭 一个飞机沿着这个路径进行飞行 如下图所示 请使用浏览器打开 平时遇到问题或加群也可以加我微信 13324598743 击此打开网盘资源链接
  • 使用jiraRestClient报错java.lang.ClassNotFoundException: com.google.common.base.MoreObjects

    问题是swagger需要guava依赖 导入依赖解决
  • 【工欲善其事必先利其器】论文编辑及文献管理(Endnote,Latex,JabRef ,overleaf)资源下载及使用指南

    EndnoteX9 百度网盘下载及安装 Download 百度网盘 链接 https pan baidu com s 1 WWYVkwF0uAUVvv73XZM6Q 提取码 mnd9 参考链接 EndNote X9 3 3 Build 13
  • 字节跳动面试题 —— 水壶问题

    原题 给你一个装满水的 8 升满壶和两个分别是 5 升 3 升的空壶 请想个优雅的办法 使得其中一个水壶恰好装 4 升水 每一步的操作只能是倒空或倒满 图片 理解了这个题目的意思之后 我们的第一个方法肯定就是使用强大的脑力来进行暴力破解法
  • 关于常量指针的用法

    一 指向常量的指针 例1 int main int num 5 const int fun 100 int pi const int pci pi num pci fun printf num addr p value d n num nu
  • LocalDateTime、LocalDate、Date的相互转换

    目录 使用背景 转换方法 LocalDateTime 转 LocalDate LocalDate 转 LocalDateTime LocalDate 转 Date Date转LocalDate LocalDateTime转Date Date
  • 跑一跑NeuralAnnot

    GitHub 传送阵 一 运行 这东西标注器代码西八兄弟没开源 我搞完之后才发现是标注结果展示 1 环境 西八兄弟好像没给环境配置 和环境有关的就这句话 1 python 3 8或以上 不然会报错 2 pycocotools 3 libgl
  • Vue3 引入Element Plus

    Element Plus 是为适配 Vue3 而对 Element UI 进行重构后产生的前端组件库 包含丰富的基础组件 下面先贴出 官方文档 里面的介绍已经十分全面和详细 大家遇到的很多问题都可以在上面找到答案 假设现在我们已经用 vue
  • 社区发现算法(二)

    GN算法 本算法的具体内容请参考Finding and evaluating community structure in networks Newman and Girvan 重要概念 边介数 betweenness 网络中任意两个节点通