LogoLogo
  • README
  • 前端编程
    • 01 Node JS
    • 02-ES6详解
    • 03-NPM详解
    • 04-Babel详解
    • 05-前端模块化开发
    • 06-WebPack详解
    • 07-Vue详解
    • 08-Git详解
    • 09-微信小程序
  • 人工智能
    • 机器学习
      • 二次分配问题
      • 非负矩阵
      • 概率潜在语义分析
      • 概率图模型
      • 集成学习
      • 降维
      • 距离度量
      • 决策树
      • 逻辑回归
      • 马尔可夫决策过程
      • 马尔可夫链蒙特卡洛法
      • 朴素贝叶斯法
      • 谱聚类
      • 奇异值分解
      • 潜在狄利克雷分配
      • 潜在语义分析
      • 强化学习
      • 社区算法
      • 时间序列模型
      • 特征工程
      • 条件随机场
      • 图论基础
      • 线性分类
      • 线性回归
      • 信息论中的熵
      • 隐马尔科夫模型
      • 支持向量机
      • 主成分分析
      • EM算法
      • Hermite 矩阵的特征值不等式
      • k-means聚类
      • k近邻法
      • PageRank算法
    • 深度学习
      • Pytorch篇
        • 01-线性模型
        • 02-梯度下降法
        • 03-反向传播
        • 04-pytorch入门
        • 05-用pytorch实现线性回归
        • 06-logistic回归
        • 07-处理多维特征的输入
        • 08-加载数据集
        • 09-多分类问题
        • 10-卷积神经网络
        • 11-循环神经网络
    • 图神经网络
      • 图神经网络笔记01
        • 01-图(Graphs)的结构
        • 02-网络的性质和随机图模型
        • 03-网络工具
        • 04-网络中的主题和结构角色
        • 05-网络中的社区结构
      • 图神经网络笔记02
        • 01-深度学习引言
        • 02-神经网络基础
        • 03-卷积神经网络
        • 04-图信号处理与图卷积神经网络
        • 05-GNN的变体与框架-
        • [06-Google PPRGo 两分钟分类千万节点的最快GNN](人工智能/图神经网络/图神经网络笔记02/06-Google%20PPRGo 两分钟分类千万节点的最快GNN.md)
        • 07-序列模型
        • 08-变分自编码器
        • 09-对抗生成网络
  • 日常记录
    • 健身日记
    • 面经记录
    • 自动生成Summary文件
  • 实战项目
    • 谷粒商城
      • 00-项目概述
      • 01-分布式基础-全栈开发篇
      • 02-分布式高级-微服务架构篇
      • 03-高可用集群-架构师提升篇
  • 数据库
    • MySQL笔记
      • 01-MySQL基础篇
      • 02-MySQL架构篇
      • 03-MySQL索引及调优篇
      • 04-MySQL事务篇
      • 05-MySQL日志与备份篇
    • Redis笔记
      • 01-Redis基础篇
      • 02-Redis高级篇
    • 02-Redis篇
  • 算法笔记
    • 01-算法基础篇
    • 02-算法刷题篇
  • 职能扩展
    • 产品运营篇
  • Go编程
    • 01-Go基础
      • 01-Go基础篇
  • Java编程
    • 01-Java基础
      • 01-Java基础篇
      • 02-多线程篇
      • 03-注射与反解篇
      • 04-JUC并发编程篇
      • 05-JUC并发编程与源码分析
      • 06-JVM原理篇
      • 07-Netty原理篇
      • 08-设计模式篇
    • 02 Java Web
      • 01-Mybatis篇
      • 01-Mybatis篇(新版)
      • 02-Spring篇
      • 02-Spring篇(新版)
      • 03-SpringMVC篇
      • 04-MybatisPlus篇
    • 03-Java微服务
      • 01-SpringBoot篇
      • 01-SpringBoot篇(新版)
      • 02-SpringSecurity篇
      • 03-Shiro篇
      • 04-Swagger篇
      • 05-Zookeeper篇
      • 06-Dubbo篇
      • 07-SpringCloud篇
      • 08-SpringAlibaba篇
      • 09-SpringCloud篇(新版)
    • 04-Java中间件
      • 数据库篇
        • 01-分库分表概述
        • 02-MyCat篇
        • 03-MyCat2篇
        • 04-Sharding-jdbc篇
        • 05-ElasticSearch篇
      • 消息中间件篇
        • 01-MQ概述
        • 02-RabbitMQ篇
        • 03-Kafka篇
        • 04-RocketMQ篇
        • 05-Pulsar篇
    • 05-扩展篇
      • Dubbo篇
      • SpringBoot篇
      • SpringCloud篇
    • 06-第三方技术
      • 01-CDN技术篇
      • 02-POI技术篇
      • 03-第三方支付技术篇
      • 04-第三方登录技术篇
      • 05-第三方短信接入篇
      • 06-视频点播技术篇
      • 07-视频直播技术篇
    • 07-云原生
      • 01-Docker篇
      • 02-Kubernetes篇
      • 03-Kubesphere篇
  • Linux运维
    • 01-Linux篇
    • 02-Nginx篇
  • Python编程
    • 01-Python基础
      • 01.配置环境
      • 02.流程控制
      • 03.数值
      • 04.操作符
      • 05.列表
      • 06.元祖
      • 07.集合
      • 08.字典
      • 09.复制
      • 10.字符串
      • 11.函数
      • 12.常见内置函数
      • 13.变量
      • 14.异常和语法错误
      • 15.时间和日期
      • 16.正则表达式
    • 02 Python Web
      • flask篇
        • 01.前言
        • 02.路由
        • 03.模板
        • 04.视图进阶
        • 05.flask-sqlalchemy
        • 06.表单WTForms
        • 07.session与cookie
        • 08.上下文
        • 09.钩子函数
        • 10.flask 信号
        • 11.RESTFUL
        • 13.flask-mail
        • 14.flask+celery
        • 15.部署
        • 16.flask-login
        • 17.flask-cache
        • 18.flask-babel
        • 19.flask-dashed
        • 20.flask-pjax
        • 21.flask上传文件到第三方
        • 22.flask-restless
        • 23.flask-redis
        • 24.flask-flash
        • 25.消息通知
        • 26.分页
    • 03-Python数据分析
      • Matplotlib
      • Numpy
      • Pandas
      • Seaborn
    • 04-Python爬虫
      • 1.准备工作
      • 2.请求模块的使用
      • 3.解析模块的使用
      • 4.数据存储
      • 5.识别验证码
      • 6.爬取APP
      • 7.爬虫框架
      • 8.分布式爬虫
由 GitBook 提供支持
在本页
  • 社区网络
  • 什么是社区
  • 三角闭合
  • 边缘重叠
  • 模块度Q
  • Louvain Algorithm

这有帮助吗?

在GitHub上编辑
  1. 人工智能
  2. 图神经网络
  3. 图神经网络笔记01

05-网络中的社区结构

上一页04-网络中的主题和结构角色下一页图神经网络笔记02

最后更新于3年前

这有帮助吗?

社区网络

什么是社区

社区可以理解为一个一个由密切相连的节点聚集而成的团体,社区内部连接紧密,社区之间稀疏连接。

有一个很有趣的现象,通过调查研究发现,人们在找工作时,往往可以通过一般的熟人(acquaintances),而不是好朋友(close friends)获取更多的信息,弱连接(一般熟人)或许是我们认识多元世界的一个很重要的渠道,对于强连接(好朋友),往往因为足够了解,可以获得的额外信息并不多。

如下图所示,可以看作是三个社区,社区内部是强连接,社区之间弱连接。

三角闭合

  • 三角闭合 ==高度聚类系数

例子:如果B和C有一个共同的朋友A,则:

  • B与C认识的可能性:因为他们都花时间和A在一起

  • B和C之间互相信任:因为他们有一个共同的朋友

  • A有激励b和c结合在一起的动机:因为A很难维持两种互不相干的关系

边缘重叠

用边重叠指标可以定量地给边定义强弱。

其中,$N(i)$是节点$i$的所有邻居,$O_{ij}$表示两个节点的邻居的重合程度,取值范围是$[0,1]$。

如果$O_{ij}=0$,则节点$i$和$j$之间的边可以叫做局部桥,是一种很弱的连接,而$O_{ij}=1$,则这个边是强连接。它两端点的所有邻居都是重叠的。

边重叠是对网络结构的一种度量,它可以帮助解释Granovetter的理论。那么这种度量是否具有实际的意义?Jure在课程里使用了欧洲人通话网络的例子验证了,在实际的网络里,具有高边重叠的边,确实是有着强连接关系的。这里的强连接关系是采用的两个人之间的电话通话单位时间内的次数来衡量的。

模块度Q

模块度Q:一种衡量网络被划分为社区的程度的指标

给定网络划分成不相交的群$s\in S$:

给定$n$个节点和$m$条边上的真实的$G$,构造重布线网络$G'$:

  • 相同的度分布,但一致随机连接

  • 把$G '$看作一个多图

  • 节点$i$和节点$j$之间的$k_i$和$k_j$的期望边数为$k_i\cdot \frac{k_j}{2m}=\frac{k_ik_j}{2m}$,则$G'$的期望边数为:

note:$\sum\limits_{u\in N}k_u = 2m$

由于图$G$的划分$S$的模块化为:

则模块度可以定义为:

其中,$A_{ij}$表示节点$i$和节点$j$的权重;和$k_j$分别为节点$i$和$j$所依附的边权值之和;$2m$为图中所有边权重之和; $c_i$是节点$i$所属社区,当节点$i,j$属于同一个社区时,$\delta(c_i,c_j)=1$ ,否则为$0$;$Q$模块化值取值范围为$[−1,1]$,如果组内的边数超过预期数,则为正,当$Q$大于$0.3-0.7$表示群落结构显著。

想法:可以通过最大化模块化来识别社区

Louvain Algorithm

Louvain是一种社区贪婪算法,用于社区发现,可以快速迭代,模型复杂度$O(n\log n)$,被广泛应用于研究大型网络 ,算法主要由两个部分组成:

  • 首先,为每个节点选择最优的社区,使局部模块度达到最大

  • 然后,对划分好社区的网络进行重构

  • 上述两个步骤不断迭代,直至模块度不再发生变化

louvain与层次聚类的区别:Louvain的第一步是遍历每一个节点,尝试把它合并到一个社区中,等到遍历结束,进入第二步时,才把社区视为一个节点,而层次聚类算法中,每做一次合并,就把合并后的cluster视为一个新的cluster,计算cluster的中心。

$\Delta Q$为多少的时候,可以将节点$i$移动到社区$C$?

其中,$\sum_{in}$是$C$中链接权重或节点之间链接数的总和,$\sum_{tot}$是$C$中所有节点的所有链接值的总和,其中$k_{i,in}$是社区$C$内节点与节点$i$的边权重之和,注意对$k_{i,in}$是对应边权重加起来再乘以2,这点在实现时很容易犯错,$k_i$是节点$i$的度。

注意,还需要考虑推导出将节点$i$从社区$D$中取出的$a$,然后:

Oij=∣N(i)∩N(j)∖{i,j}∣∣N(i)∪N(j)∖{i,j}∣O_{ij} = \frac{|N(i)\cap N(j)\setminus \{i,j\} |}{|N(i)\cup N(j)\setminus \{i,j\} |}Oij​=∣N(i)∪N(j)∖{i,j}∣∣N(i)∩N(j)∖{i,j}∣​
Q∝∑s∈S[(# edges within group s)−expected # edges within group s⏟Need a null model]Q \varpropto \sum\limits_{s\in S}[(\#\ edges\ within\ group\ s) - \underbrace{expected\ \#\ edges\ within\ group\ s }_{Need\ a\ null\ model}]Q∝s∈S∑​[(# edges within group s)−Need a null modelexpected # edges within group s​​]
Gedges′=12∑i∈N∑j∈Nkikj2m=12⋅12m∑i∈Nki(∑j∈Nkj)=14m2m⋅2m=mG'_{edges} = \frac{1}{2}\sum\limits_{i\in N}\sum\limits_{j\in N}\frac{k_ik_j}{2m} =\frac{1}{2}\cdot \frac{1}{2m}\sum\limits_{i\in N}k_i(\sum\limits_{j\in N}k_j) = \frac{1}{4m}2m\cdot 2m = mGedges′​=21​i∈N∑​j∈N∑​2mki​kj​​=21​⋅2m1​i∈N∑​ki​(j∈N∑​kj​)=4m1​2m⋅2m=m
Q∝∑s∈S[(# edges within group s)−expected # edges within group s⏟Need a null model]Q \varpropto \sum\limits_{s\in S}[(\#\ edges\ within\ group\ s) - \underbrace{expected\ \#\ edges\ within\ group\ s }_{Need\ a\ null\ model}]Q∝s∈S∑​[(# edges within group s)−Need a null modelexpected # edges within group s​​]
Q=12m∑s∈S∑i∈s∑j∈s(Aij−kikj2m)=12m∑ij(Aij−kikj2m)δ(ci,cj)Q = \frac{1}{2m}\sum\limits_{s\in S}\sum\limits_{i\in s}\sum\limits_{j\in s}(A_{ij}-\frac{k_ik_j}{2m}) \\ =\frac{1}{2m}\sum\limits_{ij}(A_{ij}-\frac{k_ik_j}{2m})\delta(c_i,c_j)Q=2m1​s∈S∑​i∈s∑​j∈s∑​(Aij​−2mki​kj​​)=2m1​ij∑​(Aij​−2mki​kj​​)δ(ci​,cj​)
ΔQ(i→C)=[∑in+ki,in2m−(∑tot+ki2m)2]−[∑in2m−(∑tot2m)2−(ki2m)2]\Delta Q(i\rightarrow C) = [\frac{\sum_{in}+k_{i,in}}{2m}-(\frac{\sum_{tot}+k_i}{2m})^2] - [\frac{\sum_{in}}{2m}-(\frac{\sum_{tot}}{2m})^2-(\frac{k_i}{2m})^2]ΔQ(i→C)=[2m∑in​+ki,in​​−(2m∑tot​+ki​​)2]−[2m∑in​​−(2m∑tot​​)2−(2mki​​)2]

​

ΔQ=ΔQ(i→C)+ΔQ(D→i)\Delta Q = \Delta Q(i\rightarrow C) + \Delta Q(D\rightarrow i)ΔQ=ΔQ(i→C)+ΔQ(D→i)
image-20210305103623205
image-20210305103450151
image-20210305104455368
image-20210305121908027
image-20210306161413481
image-20210306161425087