聚类——Newman系列算法
聚类——Newman系列算法
- 模块度 Q Q Q
- 模块度增量 Δ Q \ \Delta Q ΔQ
- Fast Newman
- CNM
- Fast Unfolding
Newman系列算法本质上是一种贪心的聚类算法,以最优化模块度 Q Q Q为目标进行聚类,在具体实现上有些类似于层次聚类(hierarchical clustering)。该系列算法在处理大型社群网络时具有较高的效率。本文将介绍这个系列中的三种:Fast Newman算法(fast algorithm for community structure in networks),CNM(clauset-newman-moore)算法(Finding community structure in very large networks. ),Fast Unfolding算法(Fast unfolding of communities in large networks)。CNM算法是在Fast Newman算法基础上用堆数据结构来计算并更新模块度的一种改进。
模块度 Q Q Q
模块度 Q Q Q是一种衡量社群网络结构强度的指标,是社群内部关联性的度量方式之一,其值越接近1,表示网络划分出的社区结构的强度越强,也就是划分质量越好。模块度的基本思想是把划分后的网络与划分后的随机网络进行比较,以度量社团划分的质量。可以公式化的定义为:
模块度 Q = ( 落在同一组内的边的比例 ) − ( 划分后的随机网络中落在同一组的边的比例 ) 模块度Q=(落在同一组内的边的比例)-(划分后的随机网络中落在同一组的边的比例) 模块度Q=(落在同一组内的边的比例)−(划分后的随机网络中落在同一组的边的比例)
这里我们考虑一种简单的网络结构——无向无加权网络。假设网络中有 n n n个节点, m m m条边,则可以用 A n × n \ A^{n \times n} An×n的邻接矩阵表示这个网络,且满足 A i j = A j i \ A_{ij}= A_{ji} Aij=Aji;当节点 i \ i i和节点 j \ j j之间有边连接时 A i j = 1 \ A_{ij}=1 Aij=1,当节点 i \ i i和节点 j \ j j之间没有边连接时 A i j = 0 \ A_{ij}=0 Aij=0。
落在同一组内的边的比例 = ( 落在同一组内边的数量 ) ÷ ( 边的总数 ) \ 落在同一组内的边的比例=(落在同一组内边的数量)\div(边的总数) 落在同一组内的边的比例=(落在同一组内边的数量)÷(边的总数)。落在同一组内边的数量等价于事件(某两个节点间存在一条边,且这条两个节点处于同一社群)的数量。这里我们引入一个变量 δ i j \ \delta_{ij} δij表示 i i i节点与 j j j节点是否处于同一社群中,当 i i i节点与 j j j节点在同一社群中时 δ i j = 1 \ \delta_{ij}=1 δij=1,不在同一社群中时 δ i j = 0 \ \delta_{ij}=0 δij=0。则结合邻接矩阵 A A A可以得到 落在同一组内边的数量 = 1 2 Σ ( A i j δ i j ) \ 落在同一组内边的数量=\frac{1}{2}\Sigma(A_{ij}\delta_{ij}) 落在同一组内边的数量=21Σ(Aijδij)由于在无向图的邻接矩阵中每条边实际会被计算两次,所以需要乘以 1 2 \ \frac{1}{2} 21。进而我们可以得到 落在同一组内的边的比例 = Σ ( A i j δ i j ) 2 m \ 落在同一组内的边的比例=\frac{\Sigma(A_{ij}\delta_{ij})}{2m} 落在同一组内的边的比例=2mΣ(Aijδij)
为了使度量具有可操作性,这里要求随机网络中的节点和原网络中的节点具有相同的度。由此,可以设想以下场景:将原有的 m m m条边从中间切开,每个节点持有原先边的一半(即半边),我们可以得到 2 m \ 2m 2m条半边,将这些半边随机两两重新连接(不包括自身),允许节点自环、两个节点间存在多条边等特殊情况,则得到的随机网络中每个节点必定具有和原来相同的度。在这个场景下,若节点 i \ i i原先度为 k i \ k_{i} ki,则它会有 k i \ k_{i} ki条半边,它的每一条半边和任意另一条半边连接的概率为 1 2 m − 1 \ \frac{1}{2m-1} 2m−11,假设节点 j j j具有 k j \ k_{j} kj条半边,则节点 i i i的某一条半边和节点 j j j的一条半边相连的概率为 k j 2 m − 1 \ \frac{k_{j}}{2m-1} 2m−1kj,节点 i i i和节点 j j j间存在一条边的期望为 k i k j 2 m − 1 \ \frac{k_{i}k_{j}}{2m-1} 2m−1kikj,当 m m m很大时,期望可近似为 k i k j 2 m \ \frac{k_{i}k_{j}}{2m} 2mkikj,故我们可以得到 划分后的随机网络中落在同一组的边的比例 = Σ ( k i k j 2 m δ i j ) 2 m 划分后的随机网络中落在同一组的边的比例=\frac{\Sigma(\frac{k_{i}k_{j}}{2m}\delta_{ij})}{2m} 划分后的随机网络中落在同一组的边的比例=2mΣ(2mkikjδij)因此 Q = 1 2 m Σ ( A i j − k i k j 2 m ) δ i j Q=\frac{1}{2m}\Sigma(A_{ij}-\frac{k_{i}k_{j}}{2m})\delta_{ij} Q=2m1Σ(Aij−2mkikj)δij
而社群是由节点组成的,如果一个网络被分为了 k k k个社群,且所有社群都不重叠,则我们可以用一个矩阵 e k × k \ e^{k\times k} ek×k表示社群划分情况,其中 e v v \ e_{vv} evv表示社群 v v v内部边的比例, e v w \ e_{vw} evw表示社群 v v v和社群 j j j之间边的比例,结合上文所述可以表示为 e v w = Σ A i j δ ( v , C i ) δ ( w , C j ) 2 m e_{vw}=\frac{\Sigma A_{ij}\delta(v,C_{i})\delta(w,C_{j})}{2m} evw=2mΣAijδ(v,Ci)δ(w,Cj)进一步我们可以定义 a v \ a_{v} av表示社群 v v v所有边的比例(包括社群内部和社群之间) a v = 1 2 m Σ i k i δ ( v , C i ) = k v 2 m = Σ w e v w a_{v}=\frac{1}{2m}\Sigma_{i}k_{i}\delta(v,C_{i})=\frac{k_{v}}{2m}=\Sigma_{w} e_{vw} av=2m1Σikiδ(v,Ci)=2mkv=Σwevw注意到 δ i j = δ ( C i , v ) δ ( C j , v ) \delta_{ij}=\delta(C_{i},v)\delta(C_{j},v) δij=δ(Ci,v)δ(Cj,v)
因此模块度也可以表示为 Q = 1 2 m Σ i j A i j δ i j − 1 2 m Σ i j k i k j 2 m δ i j = Σ v ( 1 2 m Σ i j A i j δ ( C i , v ) δ ( C j , v ) − 1 2 m Σ i k i δ ( C i , v ) 1 2 m Σ j k j δ ( C j , v ) ) = Σ v ( e v v − a v 2 ) \begin{aligned} Q&=\frac{1}{2m}\Sigma_{ij} A_{ij}\delta_{ij}-\frac{1}{2m}\Sigma_{ij}\frac{k_{i}k_{j}}{2m}\delta_{ij}\\&=\Sigma_{v}(\frac{1}{2m}\Sigma_{ij}A_{ij}\delta(C_{i},v)\delta(C_{j},v)-\frac{1}{2m}\Sigma_{i}k_{i}\delta(C_{i},v)\frac{1}{2m}\Sigma_{j}k_{j}\delta(C_{j},v))\\ &=\Sigma_{v}(e_{vv}-a_{v}^{2}) \end{aligned}\\ Q=2m1ΣijAijδij−2m1Σij2mkikjδij=Σv(2m1ΣijAijδ(Ci,v)δ(Cj,v)−2m1Σikiδ(Ci,v)2m1Σjkjδ(Cj,v))=Σv(evv−av2)
模块度增量 Δ Q \ \Delta Q ΔQ
Δ Q \ \Delta Q ΔQ表示合并两个社群后对模块度的贡献。对于社群矩阵 e e e,合并社群 v v v和社群 w w w得到新社群 u u u,社群 u u u满足 e u u = e v v + e w w + e v w + e w v \ e_{uu}=e_{vv}+e_{ww}+e_{vw}+e_{wv} euu=evv+eww+evw+ewv, a u = a v + a w \ a_{u}=a_{v}+a_{w} au=av+aw,社群 u u u与社群 k k k之间满足 e u k = e v k + e w k \ e_{uk}=e_{vk}+e_{wk} euk=evk+ewk。根据上文所述可以得到 Δ Q v w = e u u − e v v − e w w + a u 2 − a v 2 − a w 2 = e v w + e w v − 2 a v a w \Delta Q_{vw}=e_{uu}-e_{vv}-e_{ww}+a_u^{2}-a_v^{2}-a_w^{2}=e_{vw}+e_{wv}-2a_{v}a_{w} ΔQvw=euu−evv−eww+au2−av2−aw2=evw+ewv−2avaw
Fast Newman
Fast Newman算法通过每次选择最大 Δ Q v w \ \Delta Q_{vw} ΔQvw进行社群合并,达到最优化 Q Q Q的目标。具体流程为
- 先将每个节点视为一个独立的社群,初始化 e e e和 a a a,计算社群与其相邻社群融合的 Δ Q v w \ \Delta Q_{vw} ΔQvw
- 选择 a r g m a x ( Δ Q v w ) argmax(\Delta Q_{vw}) argmax(ΔQvw),融合这两个社群,更新 e e e和 a a a,重新计算 Δ Q v w \ \Delta Q_{vw} ΔQvw
- 重复步骤2,直到所有节点在同一个社群或者 Q Q Q不再增加
CNM
CNM算法沿用了Fast Newman算法的思路,在性能上作出了改进。一方面使用堆结构来维护 Δ Q v w \ \Delta Q_{vw} ΔQvw,另一方面给出了每次社群合并后 Δ Q v w \ \Delta Q_{vw} ΔQvw的递推关系 Δ Q u k = { Δ Q v k + Δ Q w k , 社群 k 与社群 v 、社群 w 都有连接 Δ Q v k − 2 a w a k , 社群 k 只与社群 v 有连接 Δ Q w k − 2 a v a k , 社群 k 只与社群 w 有连接 0 , 社群 k 与社群 v 、社群 w 均没有连接 \Delta Q_{uk}=\begin {cases} \Delta Q_{vk}+ \Delta Q_{wk},&社群k与社群v、社群w都有连接\\ \Delta Q_{vk}-2a_{w}a_{k}, &社群k只与社群v有连接\\ \Delta Q_{wk}-2a_{v}a_{k}, &社群k只与社群w有连接\\ 0, &社群k与社群v、社群w均没有连接\end{cases} ΔQuk=⎩ ⎨ ⎧ΔQvk+ΔQwk,ΔQvk−2awak,ΔQwk−2avak,0,社群k与社群v、社群w都有连接社群k只与社群v有连接社群k只与社群w有连接社群k与社群v、社群w均没有连接 根据上面提到的 Δ Q \ \Delta Q ΔQ推导过程,将 Δ Q u k \ \Delta Q_{uk} ΔQuk展开即可得到该递推关系,这里就不进行详细推导了。
Fast Unfolding
Fast Unfolding算法与Fast Newman算法过程上非常相似,都是通过对 Δ Q \ \Delta Q ΔQ贪心求取最优化 Q Q Q;不同之处在于Fast Unfolding算法在每次迭代中将所有为正的 Δ Q \ \Delta Q ΔQ都进行融合,而Fast Newman算法每次只选择最大 Δ Q \ \Delta Q ΔQ进行融合。具体流程如下
- 先将每个节点视为一个独立的社群,初始化 e e e和 a a a,计算社群与其相邻社群融合的 Δ Q v w \ \Delta Q_{vw} ΔQvw
- 判断 Δ Q v w \Delta Q_{vw} ΔQvw是否为正,若为正则融合这两个社群,否则不进行融合(计算顺序不影响融合)
- 更新 e e e和 a a a,重新计算 Δ Q v w \ \Delta Q_{vw} ΔQvw
- 重复步骤2和3,直到社群划分不再改变
聚类——Newman系列算法相关推荐
- YOLO系列算法精讲:从yolov1至yolov4的进阶之路(呕心沥血2万字超全整理,建议收藏!)
从刚开始接触YOLO到现在也已经有大半年时间了,中间也陆陆续续接触过其它网络.最近又抽时间研究了一下YOLOv4. 因此,趁此机会,将yolov1到yolov4进行一个全面的整理和总结,希望对即将入坑 ...
- 目标检测 YOLO系列算法
文章目录 1. YOLO算法 1.1 Yolo算法思想 1.2 Yolo的网络结构 1.2.1 网络输入 1.2.2 网络输出 1.7X7网格 2x30维向量 1.3 Yolo模型的训练 1.3.1训 ...
- YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)
写在前面:大家好!我是[AI 菌],算法工程师一枚,2021年博客之星Top12,公众号[AI 修炼之路]作者.专注于计算机视觉.深度学习.图像处理技术,热衷于分享AI.CV.DL.ML.OpenCV ...
- R-CNN系列算法的发展历程
目录 上一次分析了YOLO系列的算法: R-CNN 论文链接 概述 R-CNN流程 谈一下R-CNN的pre-training 谈一下R-CNN不同阶段正负样本的IOU阈值 谈一下R-CNN的fine ...
- Newman快速算法(fast greedy)
Newman快速算法实际上是基于贪婪算法思想的一种凝聚算法[1].贪婪算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法[2].社区发现(Com ...
- YOLO系列算法学习
YOLO系列算法学习 YOLOV1算法 预测阶段(前向推断) yolo基准模型和tiny模型结构 基准模型 为什么是7x7x30的输出? 流程可视化 预测阶段后处理-NMS非极大值抑制 两个bboxs ...
- AnchorFree系列算法详解
目录 前言 一.Anchor-Based方法回顾 二.Anchor Free系列方法简介 1. Anchor Free系列算法历史 2. Anchor free经典算法详解 2.1. 基于关键点的An ...
- 利用毫米波雷达点云进行多目标聚类跟踪的算法设计
利用毫米波雷达点云进行多目标聚类跟踪的算法设计 文章目录 利用毫米波雷达点云进行多目标聚类跟踪的算法设计 前言 1 简介 1.1 跟踪模块 1.2 雷达几何图 1.3 跟踪坐标系的选择 1.4 恒速度 ...
- 聚类和EM算法——K均值聚类
20211116 数据分析 | 聚类分析--kmean kmeans最优k值的确定方法-手肘法和轮廓系数法 - 简书 python大战机器学习--聚类和EM算法 注:本文中涉及到的公式一律省略(公式不 ...
最新文章
- php包含文件时显示空白页,php中添加了如下语句出现空白页 删除页面zhengchang
- python可以写接口吗_用python写api接口吗
- matlab绘制蜂窝,PPT技巧:如何快速设计蜂窝表达的图形设计?
- 求助:安装程序无法创建一个DCOM用户帐号来注册.....\valec.exe
- oracle进入到root用户,Linux环境中普通用户切换到root用户问题
- [Web开发] IE8 网页开发参考文档
- lnmp 虚拟主机的配置
- python自学教程-Python学习教程(一)自学资源分享
- const型指针区别 const * 和* const
- Oracle数据库索引使用及索引失效总结
- iptv鉴权 php,[转]关于openwrt用于dhcp客户端协议突破iptv的dhcp+鉴权(ipoe)
- 【PageHelper】实现拦截pageNum和pageSize
- HTML音频视频、JS方法,以及插件使用教学
- 【CF335E】 Counting Skyscrapers(期望)
- 交换机、路由器、网关的概念与用途
- 无穷小量究竟是否为零
- 59.Mongoose
- “达内”JAVA技术培训有感(一)
- html 中 table tr td br 什么意思 是什么的缩写
- 有未经处理的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突