聚类——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−1ki​kj​​,当 m m m很大时,期望可近似为 k i k j 2 m \ \frac{k_{i}k_{j}}{2m}  2mki​kj​​,故我们可以得到 划分后的随机网络中落在同一组的边的比例 = Σ ( k i k j 2 m δ i j ) 2 m 划分后的随机网络中落在同一组的边的比例=\frac{\Sigma(\frac{k_{i}k_{j}}{2m}\delta_{ij})}{2m} 划分后的随机网络中落在同一组的边的比例=2mΣ(2mki​kj​​δ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​−2mki​kj​​)δ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​Σi​ki​δ(v,Ci​)=2mkv​​=Σw​evw​注意到 δ 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​Σij​Aij​δij​−2m1​Σij​2mki​kj​​δij​=Σv​(2m1​Σij​Aij​δ(Ci​,v)δ(Cj​,v)−2m1​Σi​ki​δ(Ci​,v)2m1​Σj​kj​δ(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​−2av​aw​

Fast Newman

  Fast Newman算法通过每次选择最大 Δ Q v w \ \Delta Q_{vw}  ΔQvw​进行社群合并,达到最优化 Q Q Q的目标。具体流程为

  1. 先将每个节点视为一个独立的社群,初始化 e e e和 a a a,计算社群与其相邻社群融合的 Δ Q v w \ \Delta Q_{vw}  ΔQvw​
  2. 选择 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​
  3. 重复步骤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​−2aw​ak​,ΔQwk​−2av​ak​,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进行融合。具体流程如下

  1. 先将每个节点视为一个独立的社群,初始化 e e e和 a a a,计算社群与其相邻社群融合的 Δ Q v w \ \Delta Q_{vw}  ΔQvw​
  2. 判断 Δ Q v w \Delta Q_{vw} ΔQvw​是否为正,若为正则融合这两个社群,否则不进行融合(计算顺序不影响融合)
  3. 更新 e e e和 a a a,重新计算 Δ Q v w \ \Delta Q_{vw}  ΔQvw​
  4. 重复步骤2和3,直到社群划分不再改变

聚类——Newman系列算法相关推荐

  1. YOLO系列算法精讲:从yolov1至yolov4的进阶之路(呕心沥血2万字超全整理,建议收藏!)

    从刚开始接触YOLO到现在也已经有大半年时间了,中间也陆陆续续接触过其它网络.最近又抽时间研究了一下YOLOv4. 因此,趁此机会,将yolov1到yolov4进行一个全面的整理和总结,希望对即将入坑 ...

  2. 目标检测 YOLO系列算法

    文章目录 1. YOLO算法 1.1 Yolo算法思想 1.2 Yolo的网络结构 1.2.1 网络输入 1.2.2 网络输出 1.7X7网格 2x30维向量 1.3 Yolo模型的训练 1.3.1训 ...

  3. YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)

    写在前面:大家好!我是[AI 菌],算法工程师一枚,2021年博客之星Top12,公众号[AI 修炼之路]作者.专注于计算机视觉.深度学习.图像处理技术,热衷于分享AI.CV.DL.ML.OpenCV ...

  4. R-CNN系列算法的发展历程

    目录 上一次分析了YOLO系列的算法: R-CNN 论文链接 概述 R-CNN流程 谈一下R-CNN的pre-training 谈一下R-CNN不同阶段正负样本的IOU阈值 谈一下R-CNN的fine ...

  5. Newman快速算法(fast greedy)

    Newman快速算法实际上是基于贪婪算法思想的一种凝聚算法[1].贪婪算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法[2].社区发现(Com ...

  6. YOLO系列算法学习

    YOLO系列算法学习 YOLOV1算法 预测阶段(前向推断) yolo基准模型和tiny模型结构 基准模型 为什么是7x7x30的输出? 流程可视化 预测阶段后处理-NMS非极大值抑制 两个bboxs ...

  7. AnchorFree系列算法详解

    目录 前言 一.Anchor-Based方法回顾 二.Anchor Free系列方法简介 1. Anchor Free系列算法历史 2. Anchor free经典算法详解 2.1. 基于关键点的An ...

  8. 利用毫米波雷达点云进行多目标聚类跟踪的算法设计

    利用毫米波雷达点云进行多目标聚类跟踪的算法设计 文章目录 利用毫米波雷达点云进行多目标聚类跟踪的算法设计 前言 1 简介 1.1 跟踪模块 1.2 雷达几何图 1.3 跟踪坐标系的选择 1.4 恒速度 ...

  9. 聚类和EM算法——K均值聚类

    20211116 数据分析 | 聚类分析--kmean kmeans最优k值的确定方法-手肘法和轮廓系数法 - 简书 python大战机器学习--聚类和EM算法 注:本文中涉及到的公式一律省略(公式不 ...

最新文章

  1. php包含文件时显示空白页,php中添加了如下语句出现空白页 删除页面zhengchang
  2. python可以写接口吗_用python写api接口吗
  3. matlab绘制蜂窝,PPT技巧:如何快速设计蜂窝表达的图形设计?
  4. 求助:安装程序无法创建一个DCOM用户帐号来注册.....\valec.exe
  5. oracle进入到root用户,Linux环境中普通用户切换到root用户问题
  6. [Web开发] IE8 网页开发参考文档
  7. lnmp 虚拟主机的配置
  8. python自学教程-Python学习教程(一)自学资源分享
  9. const型指针区别 const * 和* const
  10. Oracle数据库索引使用及索引失效总结
  11. iptv鉴权 php,[转]关于openwrt用于dhcp客户端协议突破iptv的dhcp+鉴权(ipoe)
  12. 【PageHelper】实现拦截pageNum和pageSize
  13. HTML音频视频、JS方法,以及插件使用教学
  14. 【CF335E】 Counting Skyscrapers(期望)
  15. 交换机、路由器、网关的概念与用途
  16. 无穷小量究竟是否为零
  17. 59.Mongoose
  18. “达内”JAVA技术培训有感(一)
  19. html 中 table tr td br 什么意思 是什么的缩写
  20. 有未经处理的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突

热门文章

  1. 2018 年技术趋势预测
  2. 网包是如何到达另外一台电脑上的?当你在微信上发送一条消息时互联网发生了什么?
  3. 面向对象(四)——继承多态
  4. ps内容识别去除水印
  5. Flutter 沙龙回顾 | 跨平台技术趋势及字节跳动 Flutter 架构实践
  6. CREO学习问题——不显示弱尺寸,无法标注线段长度
  7. android面试基础知识,小程序FMP优化实录,经典好文
  8. SENET论文笔记注意力机制
  9. 第一颗国产 单/双端口 MIPI CSI/DSI 至 HDMI 1.4 发射器 芯片LT9611
  10. kvm调整配置cpu、内存