基于模块度的 louvain

1. 模块度

模块度Q作为社团发现中,社团聚类效果的度量,取值范围是 [−1/2,1),越大说明聚类效果越好;

定义为: Q = \sum_i{(e_{ii} - a_i^2)} = \sum_i{e_{ii}} - \sum_i{ a_i^2}

scrn20170308230905

e矩阵

a计算

a的另一种解释:在一种理想情况下,给定任意节点i的的度ki,对节点i和节点j进行随机连边,边属于社区c的概率期望:

scrn20170309165401

A_{ij}表示 结点i 和 结点j 之间边的数目

\frac{k_ik_j}{2m}表示 随机放置边的情况下,结点i和结点j 之间边数的期望值

带上前面的求和号,

\sum_{i,j}{A_{ij}}就表示 社团内部实际的 边 的数目 的2倍(2倍是因为ij和ji会计算2次)

\sum_{i,j}{\frac{k_ik_j}{2m}}就表示 随机放置边的情况下,社团内部边数的期望值 的2倍(2倍是因为ij和ji会计算2次)

最后除以2m,之所以是2m,就是因为前面的边数都是2倍,这样一除就可以得到边的比例。(其实有没有12m12m是无所谓的,乘以常数并不影响求最值的问题)

\frac{1}{2m} \sum_{i,j}{A_{ij}} 就表示 社团内部实际的边数的比例

\frac{1}{2m} \sum_{i,j}{\frac{k_ik_j}{2m}}就表示 随机情况下社团内部期望的边数的比例

这时,模块度可以解释为:社区内连边数与随机期望的一个差值。连边数比随机期望值越高,表明社区划分的越好。

2. Louvain

第一阶段Modularity Optimization:

1 将图中的每个节点看成一个独立的社区,此时社区的数目与节点个数相同;

2 对每个节点i,依次尝试把节点i分配到其每个邻居节点所在的社区,计算分配前与分配后的模块度变化δQ,并记录最大的那个邻居节点,如果maxδQ>0,则把节点i分配δQ最大的那个邻居节点所在的社区,否则保持不变;

3 重复2,直到所有节点的所属社区不再变化;

第二阶段称为Community Aggregation:

4 对图进行压缩,将所有在同一个社区的节点压缩成一个新节点,社区内节点之间的边的权重转化为新节点的环的权重,社区间的边权重转化为新节点间的边权重,然后重复2,3;

5 重复2~4,直到整个图的模块度不再发生变化。

 

引用:

1. http://www.yalewoo.com/modularity_community_detection.html

2. https://mp.weixin.qq.com/s/hs5I3tG6ncbuG7AiZBizWA

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值