在说明该社团分解的算法前,先简单介绍一下衡量社区划分的模块度的概念(modularity),该值被定义为:

其中AijA_{ij} 表示节点i之间的权值(无向图边权值为1),kik_i 表示网络中节点i的权值之和,cic_i表示节点i所属的社区,如果i和j在同一个社区则δ(ci,cj)=1\delta(c_i,c_j)=1否则等于0,m为整个网络的边数。
简化后网络的模块度计算公式变为:

Q=∑ncv=1[(lvM)−(dv2M)2]\sum_{v=1}^{n_c}[(\frac{l_v}{M})-(\frac{d_v}{2M})^2]

其中n是社团数量,lvl_v是社团v内部的边数,dvd_v是社团v中所有节点的度之和,M为边数。
该公式其实就是每个社区的模块度之和,这也就让我们知道了每个社区的模块度求法。

模块度可以用来衡量一个社团分化算法的优劣。给定一个网络,不同的社团分割所对应的模块度值一般是不一样的,社团分割的两个极端情况是:1、把整个网络化为一个社团,对应的模块度恒为0;2、把每一个节点视为一个社团,模块度恒为负。一个给定的网络模块度最大的社团分割称为该网络的最优分割。

BGLL社团算法介绍:该算法是由Blondel等人基于模块度概念提出的一种能够用于加权网络的层次化社团结构分析的凝聚算法,简称BGLL。

算法简述:算法分为重复迭代的两个部分。
第一部分:假设网络中有N个节点,首先我们给每个节点分配一个社区,所以初始阶段有多少个节点就有多少个社区。然后,对于网络中每个节点i,我们考虑他所有的邻居节点j,我们评估当把节点i从它所在的社区移动到其邻居j所在的社区时,模块度的增量变化,我们把节点i移动到使模块度增加最大(非负)的节点j所在的社区。如果所有计算出来的增益都不是正数,则将该节点仍处于原社区中。该过程对所有的节点重复并且按顺序应用,直到没有节点移动,则第一个过程停止,也就是任何一个节点的移动都不会导致模块度的增加。从该过程可以肯定,有些节点会被不止一次的考虑到。当然节点考虑顺序对算法最后的输出也是有影响的,但是最后对最后所划分的社区的模块度影响不大。但是节点的排序顺序是可以影响算法的运行时间的。
每一次节点移动一个孤立节点到其邻居所在的社团模块度增益为ΔQ\Delta Q:

其中∑in\sum_{in}是社区C内部的所有边的权重之和,∑tot\sum_{tot}是社区C中所有节点相关的边的权重之和。kik_i是发生在节点i上的所有边的权重之和。ki,ink_{i,in}是节点i到社区C中的所有节点的边的权重和,m是网络中所有边的权重之和。
第二部分:用第一部分所划分出来的社区当作节点组成一个新的网络。新节点之间的边的权重为两个新节点之间(其实是两个社区之间)原本的权重之和。处在同一个社区中的节点之间的边导致新网络中该新节点有自环的边。然后对于构建的新网络使用第一部分的方法进行迭代。当网络不再改变也就是出现了最大模块度的时候停止迭代。

这里得说明一下的是,原论文中对于求ΔQ\Delta Q这个公式的各个变量的意义说的不是很清楚,导致我在编写代码的时候遇到了很大的问题。后来根据前面的模块度计算公式推导了一下,才搞清楚该公式中各个量的具体含义:其中的m确实是所有边的权重。但是∑tot\sum_{tot}和∑in\sum_{in}的意义并不是所有边的权重之和,而是遍历节点,看与节点相关的边的权重之和,也就是说在计算社团内部的边时,同一条边会被计算两次。
根据上述模块度计算公式,我们可以推出任何节点在移动到其他社区带来的ΔQ\Delta Q变化:
ΔQ\Delta Q=(节点i移除原先所在社区后该社区的模块度-节点i原先所在社区的模块度)+(节点i移动到社区j后社区j的模块度-社区j原本的模块度)

该算法复杂度为Md,m为边数,d为节点的度。通过实验该算法可以很好的将网络划分社区,并且在百万级的网络中也可以在有限时间内跑完(1百万节点,1千万条边的真实网络一个小时以内就可以划分完毕)。一般所有时间都花在了第一次迭代上,后面由于超级节点的合并,速度越来越快。

附上该算法的python代码:
http://download.csdn.net/download/qq_31192383/9927398

社团挖掘算法——BGLL算法相关推荐

  1. 社团发现算法-BGLL算法(附代码实现)

    一.社团发现算法 人们发现许多实际网络均具有社团结构, 即整个网络由若干个社团组成,社团之间的连接相对稀疏.社团内部的连接相对稠密.社团发现则是利用图拓扑结构中所蕴藏的信息从复杂网络 中解析出其模块化 ...

  2. bgll算法 matlab,一种复杂网络社区检测的方法与流程

    本发明涉及一种社区检测方法,具体说是一种复杂网络社区检测的方法. 背景技术: 过去几年中已有许多社区检测方法相继提出,其中应用最广泛的是基于模块度的最优化方法.然而,模块度最优化本质上是一个典型的NP ...

  3. r语言实现关联分析--关联规则挖掘(Apriori算法) (r语言预测学习笔记)

    r语言实现关联分析–关联规则挖掘 关联分析: 引子: 我们一般把一件事情发生,对另一间事情也会产生影响的关系叫做关联.而关联分析就是在大量数据中发现项集之间有趣的关联和相关联系(形如"由于某 ...

  4. 社团划分——Fast Unfolding算法

    社团划分--Fast Unfolding算法 一.社区划分问题 1.社区以及社区划分 在社交网络中,用户相当于每一个点,用户之间通过互相的关注关系构成了整个网络的结构,在这样的网络中,有的用户之间的连 ...

  5. 频繁项集挖掘算法——Apriori算法

    前言 关联规则就是在给定训练项集上频繁出现的项集与项集之间的一种紧密的联系.其中"频繁"是由人为设定的一个阈值即支持度 (support)来衡量,"紧密"也是由 ...

  6. 【数据挖掘】数据挖掘算法 组件化思想 示例分析 ( 组件化思想 | Apriori 算法 | K-means 算法 | ID3 算法 )

    文章目录 一. 数据挖掘算法组件化思想 二. Apriori 算法 ( 关联分析算法 ) 三. K-means 算法 ( 聚类分析算法 ) 四. ID3 算法 ( 决策树算法 ) 一. 数据挖掘算法组 ...

  7. 2021-03-15 数据挖掘算法—K-Means算法 Python版本

    数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...

  8. 漫画说算法--动态规划算法三(绝对通俗易懂,非常棒)

    在前两集漫画中,我们通过一个算法问题的完整解题过程,讲述了动态规划的基本概念和思想.没看过前两集的朋友可以点击下面的链接: 漫画说算法–动态规划算法一(绝对通俗易懂,非常棒) 漫画说算法–动态规划算法 ...

  9. python dfs算法_算法工程师技术路线图

    前言 这是一份写给公司算法组同事们的技术路线图,其目的主要是为大家在技术路线的成长方面提供一些方向指引,配套一些自我考核项,可以带着实践进行学习,加深理解和掌握. 内容上有一定的通用性,所以也分享到知 ...

  10. 关联规则算法——Apriori算法解析及Python实现

    文章目录 关联规则挖掘过程 Apriori算法 1. Apriori算法的基本思想 2. Apriori算法产生频繁项集的过程 3. Apriori算法的主要步骤 4. 举例及代码实现 关联规则挖掘过 ...

最新文章

  1. 十分钟教你开发EOS智能合约
  2. Plugin with id ‘com.android.XXX‘ not found.
  3. Zw*与Nt*的区别
  4. 计算机考研:计算机网络五大考点解析
  5. 新一代大数据处理引擎 Apache Flink
  6. SQL Lite on NHibernate
  7. hihoCoder #1758 加减
  8. LeetCode 1662. 检查两个字符串数组是否相等
  9. Intel 64/x86_64/IA-32/x86处理器指令集 - CPUID (1) - 概述
  10. mysql bdb 锁_BDB锁共享区域
  11. android ListView和GridView拖拽移位具体实现及拓展
  12. SPOJ 9939 Eliminate the Conflict
  13. 厉害了,2019-2020中国互联网趋势报告
  14. 转 自定义View之onMeasure()
  15. pyecharts之参透神剧人物关系
  16. html 向左箭头图标css,使用css实现箭头图标
  17. 物联网智慧物流平台开发
  18. 无线ap安全dhcp服务器,AC+AP时代——办公区内满足安全性又够人性化的WiFi漫游设置攻略...
  19. 咱张家界桑植的野外小吃
  20. 下单账户与实付账户不一致_如何保护您的不一致帐户

热门文章

  1. wm java 载入jad错误_jad文件的错误代码,分享
  2. eclipse jad 反编译class文件 插件安装
  3. 评选最佳文本编辑器-UltraEdit From善用佳软
  4. ExtJS学习之EditorGridPanel
  5. 天堂2游戏登陆服务器源码分析1
  6. java移位操作示例
  7. matlab鲍威尔法(Powell)
  8. 某处发现百分百恢复覆盖的分区数据恢复方法(掌握)
  9. 【时序】LSTNet:结合 CNN、RNN 以及 AR 的时间序列预测模型
  10. 使用MongoVUE