Louvain 论文笔记
Louvain
Introduce
Louvain算法是社区发现领域中经典的基于模块度最优化的方法,且是目前市场上最常用的社区发现算法。社区发现旨在发现图结构中存在的类簇(而非传统的向量空间)。
Algorithm Theory
模块度(modularity)
要想理解Louvain算法需先理解模块度,模块度是衡量一个网络社区划分好坏的度量指标,可以简单理解为“给定算法得到的图中的社区划分D,社区内节点的连边权重和与对应随机图中的连边权重和的差,可以理解为社区内边权重之于社区间边权重的比例,当然,社区内边权重越大,则模块度越大,社区中节点联系更加紧密,社区划分质量越好。”模块度的公式如下所示:
以下均无向无权图为例,m为图中的边数,2m为图的总度数,A为邻接矩阵,当两个节点直接相连时Aij=1,否则Aij=0,ki为节点i的度,δ(ci,cj)为指示函数,当节点i、j位于同一个社区,其为1,否则为0。
公式中比较难理解的是中括号中的第二项,啥意思呢? 之前提到随机图,这边公式中的第二项指的是随机图中度为ki和度为kj的两个节点相连的概率。得到的社区划分与随机图(无规律,且无明显社区结构)相差越大,则社区内连接越紧密,社区间连接越稀疏(即社区边界更明显),发现的社区质量越好。
好了,模块度就理解到这儿,简单总结一下,模块度范围在[-0.5,1),一般模块度越高,发现的社区质量越好。(原始模块度论文表示当模块度值在0.3~0.7之间时,社区质量好)
Louvain Flow Chart:
现在进入正题,Louvain算法的总体框架(流程图)如下图所示:
Louvain是一个迭代更新算法(初始每个节点自成一个社区),每个迭代称为一个pass,每个pass都包括两个步骤。即Louvain算法等价于不断迭代以下两个步骤(阶段):
(1)步骤1:首先,为每个节点分配一个单独的社区。其次对于每个节点i,考虑其邻居j,计算将节点i归入节点j所在社区模块度的增益。考虑节点i的所有邻居,并且将节点i归入到模块度增益的社区最大。如果节点i归到他邻居所在社区都没有模块度增益(即模块度增益为0或者负数)的话,那节点i仍然留在他原始的社区中。这个过程反复做,直到改变任何节点的社区标签都没有更进一步的模块度增益就停止,停止之后第一阶段就结束了。以上最重要的就是要搞懂模块度增益这玩意怎么算呢? 模块度增益可以通过以下公式计算。
啥意思呢?我们可以化简一下得到如下式子:
\Delta Q =[\frac{k_{i,in}}{2m}-\frac{\sum_{tot}k_i}{2m^2}]
括号中第一项的意思可以理解为节点i加入邻居所在社区之后对应社区内的连边数。括号中第二项的意思可以理解为结点加入邻居社区后,对应社区间以及社区内的连边数。最大化该模块度增益,就是最大化这个差,这个差大了,就说明节点i加入到这个邻居社区之后,使得该社区的内聚度更高了,社区结构越明显了。emmm,模块度增益最大化大概就是这么个意思了。
(2)步骤2:算法的第二阶段做的事情是,结合步骤1得到的初始社区划分建立一个新的网络,新网络的节点是在第一阶段发现的初始社区(把社区粗化成一个粗化节点),两个粗化节点之间的边由两个社区原始对应的社区间边的权重和(无向图即两个社区间相连的边数),同一社区节点之间的连边权重生成这个社区粗化节点的一个自环边。一旦完成了第二阶段,就将构成的新的网络输入第一阶段再进行迭代(因为粗化(层次的概念),每次网络中的初始社区数会变小,因此后面迭代的速度会更快)。
至此,Louvain算法介绍结束。
Reference
- Blondel V D, Guillaume J L, Lambiotte R, et al. Fast unfolding of communities in large networks[J]. Journal of statistical mechanics: theory and experiment, 2008, 2008(10): P10008.
- 社区发现算法——louvain完全解读
- 模块度与Louvain社区发现算法
Louvain 论文笔记的更多相关文章
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- 论文笔记之:Visual Tracking with Fully Convolutional Networks
论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015 CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...
- Deep Learning论文笔记之(八)Deep Learning最新综述
Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...
- Twitter 新一代流处理利器——Heron 论文笔记之Heron架构
Twitter 新一代流处理利器--Heron 论文笔记之Heron架构 标签(空格分隔): Streaming-process realtime-process Heron Architecture ...
- Deep Learning论文笔记之(六)Multi-Stage多级架构分析
Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些 ...
- Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型
看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...
- 论文笔记(1):Deep Learning.
论文笔记1:Deep Learning 2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature ...
- 论文笔记(2):A fast learning algorithm for deep belief nets.
论文笔记(2):A fast learning algorithm for deep belief nets. 这几天继续学习一篇论文,Hinton的A Fast Learning Algorithm ...
- 论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN
论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN ICCV 2017 Paper: http://op ...
随机推荐
- MyBatis的Example如何按条件排序(Day_35)
MyBatis的Example如何按条件进行排序? 背景:有时我们在使用mybatis example 进行查询时,需要进行相应的业务排序.本博客以下图为例 @Override public List ...
- 克隆 JavaScript
克隆 浅克隆 浅克隆无法copy数组和对象 var obj = { name : "abs", age : '18', sex : 'male' } var obj1 = {} f ...
- 在gitlab网页上合并分支
在gitlab网页上合并分支 使用gitlab网页将代码合并分 下面将dev分支代码合并至master 1.点击request merge 2.源分支为当前分支,目标分支默认为master,确认无误, ...
- 快速导入GitHub上面的公钥
有时候新装了一台linux机器, 又要找公钥导进去, 或者在自己电脑上执行ssh-copy-id, 有时候手边没有电脑就比较麻烦, 我们可以将GitHub上配置的公钥导入到机器里 首先包装GitHub ...
- Tengine Framework基础
Tengine Framework基础 最受开发者喜爱的边缘AI计算框架 Tengine是OPEN AI LAB推出的自主知识产权的边缘AI计算框架,致力于解决AIoT产业链碎片化问题,加速AI产业化 ...
- NVIDIA TensorRT:可编程推理加速器
NVIDIA TensorRT:可编程推理加速器 一.概述 NVIDIA TensorRT是一个用于高性能深度学习推理的SDK.它包括一个深度学习推理优化器和运行时间,为深度学习推理应用程序提供低延迟 ...
- 功率半导体碳化硅(SiC)技术
功率半导体碳化硅(SiC)技术 Silicon Carbide Adoption Enters Next Phase 碳化硅(SiC)技术的需求继续增长,这种技术可以最大限度地提高当今电力系统的效率, ...
- 单点突破:Set
HashSet HashSet存放的是散列值,它是按照元素的散列值来存取元素的. 元素的散列值通过hashCode方法计算 HashSet通过判断两个元素的Hash值是否相等,如果相等就会用equal ...
- 【Android漏洞复现】StrandHogg漏洞复现及原理分析_Android系统上的维京海盗
文章作者MG1937 CNBLOG博客:ALDYS4 QQ:3496925334 0x00 StrandHogg漏洞详情 StrandHogg漏洞 CVE编号:暂无 [漏洞危害] 近日,Android ...
- Django(68)drf分页器的使用
前言 当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面 PageNumberPagination:基础分页器,性能略差 LimitOffsetP ...