图论(四):图的中心性——度中心性介数中心性紧密中心性

图的中心性:描述节点在图中有多“中心”

度中心性

  • 以节点的度数度量中心性
  •  用nx.degree_centrality(G)计算

介数中心性

  • 量化节点在图中承担“桥梁”程度
  • 计算 节点v 出现在其他任意两个节点对 (s,t) 之间的最短路径的次数(下式V 是无向图节点集合。(s,t) 是无向图中任意一对节点)

  • nx.betweenness_centrality(G , normalized = False) 计算。参数 normalized = False 表示不归一化。默认是 True ,计算归一化介数中心性

紧密中心性:

  • 紧密中心性 具体定义如下,其中,d(a, v) 是节点 a v 最短距离,k – 1 代表节点 a 可达节点的数量;也就是说 k 为包含节点自身可达节点数量。

上式取倒数节点 a 和可达节点之间平均最短距离,说明平均最短距离越大,中心性越小(倒数),即越远离中心。

  • nx.closeness_centrality(G)计算。对于有向图,可以分别计算入度紧密中心性、出度紧密中心性。

特征向量中心性:

  • 基于邻接矩阵特征值分解等线性代数工具(下节)
  • nx.eigenvector_centrality(G)计算

邻接矩阵:用于表示图的矩阵

  • 无向图的邻接矩阵对称,行和列的数量等于图中的节点数量
  • 矩阵的元素表示节点之间是否存在边——对于无权无向图,两节点之间存在边,元素值为1;反之为0
  • 提供了一种紧凑的方式来表示图中的连接关系,某些算法易于处理这种格式
  • 利用 NetworkX 的工具to_numpy_matrix()adjacency_matrix()方法将无向图转化为邻接矩阵
undirected_G = nx.Graph() # 创建无向图的实例
undirected_G.add_nodes_from(['a', 'b', 'c', 'd']) # 添加多个顶点
undirected_G.add_edges_from([('a','b'),('b','c'),('b','d'), ('c','d'),('c','a')]) # 增加一组边# adjacency_matrix = nx.to_numpy_matrix(undirected_G)
adjacency_matrix = nx.adjacency_matrix(undirected_G).todense() #2种方法。将图转化为邻接矩阵

#用热图可视化矩阵
plt.figure(figsize = (14,9))
sns.heatmap(adjacency_matrix,cmap = 'RdYlBu_r',square = True, xticklabels = [], yticklabels = [])
plt.savefig('A邻接矩阵.svg')

  • 也可利用nx.Graph(adjacency_matrix, nodetype=int)的方法将邻接矩阵转化为图
  • 对于有权无向图邻接矩阵的每个元素直接换成边的权重值
  • 有向图的邻接矩阵 A 一般不是对称矩阵,这种不对称也显示了其方向性
  • 成对(欧式)距离矩阵亲近度矩阵协方差矩阵相关性系数矩阵等等都可以看做是 邻接矩阵
  • 成对欧式距离矩阵、亲近度矩阵、相关系数矩阵都可叫 成对度量矩阵!(后续博客....)
  • 邻接矩阵算是 与图直接相关的矩阵,其他与图也相关的矩阵有: 关联矩阵、度矩阵、拉普拉斯矩阵、转移矩阵等。

分割社群:紧密连接的节点集合

Girvan-Newman用于社区检测的算法实现,它基于边介数中心性的概念。是一种分裂算法,它通过逐步移除图中边介数最高的边来揭示网络中的社区结构。

NetworkX还提供了其他社区检测算法:

  • Louvain方法(通过community.greedy_modularity_communities
  • 标签传播算法(通过community.label_propagation_communities)等

Girvan-Newman算法

特点

  • 基于边的移除:算法通过移除网络中起“桥接”作用的关键边来逐渐揭露社区结构。
  • 模块度优化:和Louvain方法一样,Girvan-Newman算法也关注于优化模块度指标,但它通过不同的策略来达到这一目标。
  • 计算复杂度高:算法的时间复杂度较高,尤其是在大规模网络中,这限制了它的实用性。
  • 层次结构:算法产生一个社区的层次结构,从整体网络到最精细的单节点社区。

实现过程

  1. 初始化:开始时,整个网络被视为一个单一的大社区。
  2. 计算边介数:对于网络中的每一条边,计算其介数(即网络中所有最短路径经过该边的比例)。介数高的边通常连接不同的社区。
  3. 移除最高介数的边:找到介数最高的边并移除,这通常会分离出一些子社区。
  4. 重新计算介数:在更新后的网络中重新计算所有边的介数。
  5. 重复过程:重复步骤3和4,直到不再有边可以移除或满足停止条件(如模块度不再显著增加)。
  6. 分析层次结构:算法结束时,可以得到一个层次结构的社区划分,从顶层的整个网络到底层的单个节点社区

标签传播算法 (LPA)————随机性、动态变化图、快速检测

特点

  • 简单快速:LPA是一种基于局部邻域信息的迭代算法,不需要任何参数设置,因此非常容易实现和快速执行。
  • 非确定性:每次运行可能会得到不同的结果,因为它依赖于初始化标签的随机性。
  • 动态适应性:适用于动态网络,能够快速适应网络结构的变化。

实现过程

  1. 初始化:为网络中的每个节点随机分配一个唯一的标签。
  2. 迭代传播:在每个迭代步骤中,每个节点更新自己的标签为邻居节点中出现次数最多的标签。
  3. 收敛检查:当没有节点改变标签时,算法收敛,输出社区划分结果。

Louvain方法——较高的模块度优化

特点

  • 优化目标明确:通过最大化模块度(Modularity)来优化社区结构。
  • 层次结构:采用两阶段策略,首先在局部层面优化社区,然后在全局层面重组社区。
  • 高效性:通过多层次的优化策略,能够在大规模网络上高效运行。

实现过程

  1. 初始化:每个节点视为独立的社区。
  2. 局部优化:在每一层中,遍历网络中的每个节点,尝试将其移动到相邻的社区中,计算模块度的改变,选择模块度增加最大的移动。
  3. 重构网络:将上一步中形成的社区视为超节点,重新构建网络。
  4. 重复步骤2和3,直到模块度不再提高。

Infomap算法——适合网络规模非常大,且需要考虑信息流的角度

特点

  • 信息理论基础:基于最小化社区内和社区间的信息流编码长度。
  • 适合检测重叠社区:虽然原始算法不直接支持重叠社区,但有改进版本可以处理这种情况。
  • 可扩展性:适用于大规模网络,通过层次聚类减少计算复杂度。

实现过程

  1. 构建概率转移矩阵:基于网络中的边权重,计算节点之间的转移概率。
  2. 层次聚类:使用树状图(Dendrogram)表示节点之间的关系,通过信息理论原则分割树状图,形成社区。
  3. 最小化码率:寻找最优的社区划分,使得信息流编码的总长度最短。

若需要快速得到结果且网络是动态变化的,LPA可能是首选;如果追求较高的模块度优化,Louvain方法更为合适;而如果网络规模非常大,且需要考虑信息流的角度,Infomap算法则可能更为适用。Girvan-Newman高计算成本,通常不适用于非常大的网络。


communities = girvan_newman(G)
#用于社区检测的算法,它基于边的“边介数”来迭代地移除图中的边,直到将图分割成多个社区。
#这个过程通常通过计算图中所有边的边介数开始,然后移除边介数最高的边,
#并重复这个过程,直到满足某个停止条件(比如达到预定的社区数量,或者边的边介数低于某个阈值)。node_groups = []
for com in next(communities):node_groups.append(list(com))# 根据社区划分设置节点颜色
color_map = []
for node in G:if node in node_groups[0]:color_map.append('green')else: color_map.append('red') plt.figure(figsize = (14,9))
nx.draw_networkx(G, pos = nx.circular_layout(G),node_color=color_map, node_size = 400,with_labels=True)
plt.savefig('社区划分,circular_layout.svg')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21051.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在项目中调用本地Deepseek(接入本地Deepseek)

前言 之前发表的文章已经讲了如何本地部署Deepseek模型,并且如何给Deepseek模型投喂数据、搭建本地知识库,但大部分人不知道怎么应用,让自己的项目接入AI模型。 文末有彩蛋哦!!! 要接入本地部署的deepsee…

DeepSeek服务器繁忙 多种方式继续优雅的使用它

前言 你的DeepSeek最近是不是总是提示”服务器繁忙,请稍后再试。”,尝试过了多次重新生成后,还是如此。之前DeepSeek官网连续发布2条公告称,DeepSeek线上服务受到大规模恶意攻击。该平台的对话框疑似遭遇了“分布式拒绝服务攻击”&#xff0…

利用亚马逊AI代码助手生成、构建和编译一个游戏应用(下)

在上篇文章中中,我们介绍了如何通过亚马逊AI代码生成助手 - Amazon Q Developer代理的代码生成、构建和测试功能,让开发者可以更高效地交付高质量代码项目,同时减少代码中bug错误,提升整体开发体验。在本篇中,我们将通…

网络安全技术pat实验 网络安全 实验

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络安全实验3 前言Kali 常用指令工具教程 ettercap 基本使用 一、口令破解 John the ripper 破解 linux 密码l0phtcrack7 破解 windows 密码John 破解 zip 压…

网络行为管理系统是什么?有什么功能?

​简单来说,网络行为管理系统就是对网络进行有效的规范约束和调整,关于网络行为管理系统的相关问题整理了一些详细介绍供大家参考。 一、什么是网络行为管理系统? 在数据网络和数据通信业务发展非常迅速,在数据网络和通信业务迅…

毕业设计—基于Spring Boot的社区居民健康管理平台的设计与实现

🎓 毕业设计大揭秘!想要源码和文章?快来私信我吧! Hey小伙伴们~ 👋 毕业季又来啦!是不是都在为毕业设计忙得团团转呢?🤔 别担心,我这里有个小小的福利要分享给你们哦&…

垃圾回收器

一、GC分类与性能指标 1.垃圾回收器概述: 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将…

Java基础——代理模式

代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 一、代理模式的主要作用 控制访问:通…

微软宣布 Windows 11 将不再免费升级:升级需趁早

大家都知道如果你现在是Windows 10 系统,其实可以免费升级到正版 Windows 11,只要你的电脑配置满足 TPM2.0要求。 而最近微软已经公布了 Windows 10 的最后支持时间,也就是今年10月14日,在这之后微软将不再对Windows 10负责&#…

django连接mysql数据库

1.下载mysqlclient第三方库 2.在settings.py里连接数据库(提前建好) DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: 学生信息,USER: root,PASSWORD: 999123457,HOST: localhost,POST: 3306,} } 3.在models.py里创建一个类&#xff0…

滤波器 | 原理 / 分类 / 特征指标 / 设计

注:本文为 “滤波器” 相关文章合辑。 未整理去重。 浅谈滤波器之 —— 啥是滤波器 原创 RF 小木匠 射频学堂 2020 年 03 月 25 日 07:46 滤波器,顾名思义,就是对信号进行选择性过滤,对不需要的信号进行有效滤除。按照其传输信…

v4l2子系统学习(一)V4L2应用程序编程

文章目录 1、声明2、前言3、数据采集流程3.1、buffer的管理3.2、完整的使用流程 4、应用程序编写5、测试 1、声明 本文是在学习韦东山《驱动大全》V4L2子系统时,为梳理知识点和自己回看而记录,全部内容高度复制粘贴。 韦老师的《驱动大全》&#xff1a…

NAC网络接入控制三种认证方式802.1X认证、MAC认证和Portal认证

NAC网络接入控制三种认证方式802.1X认证、MAC认证和Portal认证 1.NAC简介2.802.1X认证3. MAC认证4. Portal认证 1.NAC简介 NAC(Network Access Control)称为网络接入控制,通过对接入网络的客户端和用户的认证保证网络的安全,是一…

vscode远程报错:Remote host key has changed,...

重装了Ubuntu系统之后,由20.04改为22.04,再用vscode远程,就出现了以上报错。 亲测有效的办法 gedit ~/.ssh/known_hosts 打开这个配置文件 删掉与之匹配的那一行,不知道删哪一行的话,就打开第一行这个 /.ssh/confi…

多个 JDK 版本(Java 8、Java 17、Java 21)下载和切换

文章目录 多个 JDK 版本(Java 8、Java 17、Java 21)下载和切换1. 下载 JDK2. 配置环境变量3. JDK 版本切换4. 测试5. 在 IDEA 中切换 JDK注意: 多个 JDK 版本(Java 8、Java 17、Java 21)下载和切换 随着 Spring Boot …

深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作

一、问题背景(传统爬虫的痛点) 数据采集是现代网络爬虫技术的核心任务之一。然而,传统爬虫面临多重挑战,主要包括: 反爬机制:许多网站通过检测请求头、IP地址、Cookie等信息识别爬虫,进而限制…

【Vue+python】Vue调用python-fastApi接口实现数据(数值、列表类型数据)渲染

前言:之前做的一直都是SpringBootVue的应用,但现在需要实现一个能将python实现的算法应用展示在前端的界面。想法是直接Vue调用python-fastApi接口实现数据渲染~ 文章目录 1. 变量定义2. axios调用python3. 跨域问题解决4. 数据渲染4.1 数值数据渲染4.2 …

SOME/IP--协议英文原文讲解8

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2 Speci…

禁止WPS强制打开PDF文件

原文网址:禁止WPS强制打开PDF文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何避免WPS强制打开PDF文件。 方法 1.删除注册表里.pdf的WPS绑定 WinR,输入:regedit,回车。找到:HKEY_CLASSES_ROOT\.pdf删除KWPS.PDF…

Pytorch深度学习教程_3_初识pytorch

欢迎来到《PyTorch深度学习教程》系列的第三篇!在前面的两篇中,我们已经介绍了Python及numpy的基本使用。今天,我们将深入探索PyTorch的核心功能,帮助你更好地理解和使用这个强大的深度学习框架。 欢迎订阅专栏: 深度…