图处理:rigraph实现边介数社区发现算法(GN)

2023-11-23 02:31

本文主要是介绍图处理:rigraph实现边介数社区发现算法(GN),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图处理:rigraph实现边介数社区发现算法(GN)


  • 节点介数和边介数
  • rigraph实现
  • 边介数的计算

按照边介数来划分社区是个有趣的话题。根据rigraph可以轻松的实现这一功能,更详细的内容请参考edge.betweenness.community 。

节点介数和边介数

节点介数已在图处理:使用graphstream来计算无向图的介数中心性一文中,有浅显的介绍。就不在这里重复了,而边介数参考betweenness - igraph和edge_betweenness_centrality — NetworkX 。

参考:

[1]. A Faster Algorithm for Betweenness Centrality. Ulrik Brandes, Journal of Mathematical Sociology 25(2):163-177, 2001.
[2]. Ulrik Brandes: On Variants of Shortest-Path Betweenness Centrality and their Generic Computation. Social Networks 30(2):136-145, 2008.

在节点的最短路径中,边介数是通过边E的总和

cB(e)=s,tVσ(s,t|e)σ(s,t)

其中V是节点的集合, σ(s,t) 是节点(s,t)之间最短路径的个数。 σ(s,t|e) 节点(s,t)之间,通过边e的,最短路径的个数[2]。

rigraph实现

喜欢python的同学可以使用networkx。这里将列出rigraph的实现

> library(igraph)
> g <- graph.formula(0-5,5-4,4-3,3-2,2-1,1-6)
> V(g)
> E(g)
> ecount(g)
> is.weighted(g)
> ebc <- edge.betweenness.community(g)
> library(ape)
> membership(ebc)
0 5 4 3 2 1 6 
1 1 1 2 2 3 3 
> dendPlot(ebc, mode="hclust")

wg_betweenness_communities.png)

边介数的计算

参考:
1. M Newman and M Girvan: Finding and evaluating community structure in networks, Physical Review E 69, 026113 (2004)
2. r - edge betweenness community cut off point - Stack Overflow
3. 汪小帆. 复杂网络理论及其应用[M]. 清华大学出版社, 2006.

边介数的公式[1],初学是有点难于理解。

cB(e)=s,tVσ(s,t|e)σ(s,t)

其实,edge.betweenness.community 是Girvan和Newman(GN)提供算法的一种实现。GN方法就是一种分裂方法。它的基本思想是不断地从网络中移除介数(Betweenness)最大的边。边介数定义为网络中经过每条边的最短路径的数目[3]。

GN算法的基本流程如下:
1. 计算网络中所有边的介数;
2. 找到介数最高的边并将它从网络中移除;
3. 重复步骤2,直到每个节点就是一个退化的社团为止。

下面,将步骤减慢一步一步的分解[2]。

> g <- graph.formula(0-5,5-4,4-3,3-2,2-1,1-6)
> edge.betweenness(g)
[1]  6 10 12 12 10  6
#12最大,去掉4-3这条边
> edge.betweenness(graph.formula(0-5,5-4,3-2,2-1,1-6))
[1] 2 2 3 4 3
#4最大,去掉2-1这条边
> edge.betweenness(graph.formula(0-5,5-4,3-2,1-6))
[1] 2 2 1 1
#2最大,去掉0-5这条边
> edge.betweenness(graph.formula(5-4,3-2,1-6))
[1] 1 1 1
#1最大,去掉5-4这条边
> edge.betweenness(graph.formula(3-2,1-6))
[1] 1 1
#1最大,去掉3-2这条边
> edge.betweenness(graph.formula(1-6))
[1] 1

g-betweenness-cut.png

这篇关于图处理:rigraph实现边介数社区发现算法(GN)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/414707

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小