1. 模块度
模块度Q作为社团发现中,社团聚类效果的度量,取值范围是 [−1/2,1),越大说明聚类效果越好;
定义为:
e矩阵
a计算
a的另一种解释:在一种理想情况下,给定任意节点i的的度ki,对节点i和节点j进行随机连边,边属于社区c的概率期望:
表示 结点i 和 结点j 之间边的数目
表示 随机放置边的情况下,结点i和结点j 之间边数的期望值
带上前面的求和号,
就表示 社团内部实际的 边 的数目 的2倍(2倍是因为ij和ji会计算2次)
就表示 随机放置边的情况下,社团内部边数的期望值 的2倍(2倍是因为ij和ji会计算2次)
最后除以2m,之所以是2m,就是因为前面的边数都是2倍,这样一除就可以得到边的比例。(其实有没有12m12m是无所谓的,乘以常数并不影响求最值的问题)
就表示 社团内部实际的边数的比例
就表示 随机情况下社团内部期望的边数的比例
这时,模块度可以解释为:社区内连边数与随机期望的一个差值。连边数比随机期望值越高,表明社区划分的越好。
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