接着上文,我们需要进一步了解Gephi工具计算modularity的算法。在Gephi社区中,有文档 Modularity - Gephi Wiki 说明了算法[1]。

What & Why Community Detection

在直接进入文章之前,需要先了解community detection的出发点和意图。直观地说,community detection的一般目标是要探测网络中的“块”cluster或是“社团”community;这么做的目的和效果有许多,比如说机房里机器的连接方式,这里形成了网络结构,那么,哪些机器可以视作一个“块”?进一步地,什么样的连接方式才有比较高的稳定性呢?如果我们想要让这组服务瘫痪,选择什么样的目标呢?How can Modularity help in Network Analysis

我们再看一个例子,word association network。即词的联想/搭配构成的网络:


我们用不同的颜色对community进行标记,可以看到这种detection得到的结果很有意思。这个网络从词bright开始进行演化,到后面分别形成了4个组:Colors, Light, Astronomy & Intelligence。可以说以上这4个词可以较好地概括其所在community的特点;另外,community中心的词,比如color, Sun, Smart也有很好的代表性。

你或许也已发现,那些处在交叠位置的词呢?比如Bright、light等词,他们是义项比较多的词。这个图也揭示出了这一层含义。*以上给出的例子均是来自文章[2]

好,我们现在正式开始读文章!

算法思路概要

我们回忆一下,或者问自己:什么样的东西能成为团?嗯,对,同一团内的节点连接更紧密,即具有更大的density。那么,什么样的metrics可以用来描述这种density?好了,假设我们有了这个density定义了,要怎样继续下去呢?

嗯,这就是所谓method based on modularity optimization

Our method is a heuristic method that is based on modularity optimization.

optimization体现在哪?前面我们提到过density,那么,一个最完美的方案是什么样的?当然便是每个节点都找到了最好的去处,同时使得一个community间的紧密度最大!

Modularity & Density

这个问题,一方面是网络的拆分partition,另一方面是衡量这组partition的quality。我们用modularity of the partition来表示这组拆分的quality:


其中 代表节点i,j间连接的权重, 即与节点i相连的所有边的权重之和, 表示节点i, j的commnity index;接下来的函数 表示节点i,j是否在同一个community中(相同时取1,否则取0),最后 表示整个网络的连接权重总和。

注意到,Q的取值范围是在[-1,1]之间的。当i,j没有边相连,我们便可以认为,然而其他项是可能大于0的;这个设定意味着,这样加入一个节点(但这个节点与该community中的某些点没有连接),会带来负的作用。

可以看到,这个定义,是通过link来描述的。我们下面直观地给出一个例子,来计算一下该分割的quality(也叫modularity):


可以看到,这种分割方式是使Q最大的,即模块化程度越高越好(不超过1)。好了,我们在前面说过了模型的思路,有了一个overview以后,我们接下来把整个模型求解学习一下。

Method

算法可分为两个阶段,并不断重复迭代。例如我们有N个节点的网络:

  1. 为每一个节点都分配一个community index,即此时网络有N个community。此为初始状态
  2. 对每个节点i,我们考虑它的邻接节点j;我们让i的community变成j的,看这个动作对modularity的值有怎样的作用。如果这个变动带来的是正的,那我们就接纳这个变动,否则就保持原来的分配方式

好,第一个phase就是这样。当整个过程做到无法再提升的时候便停止。这里需要再注意一点,就是...初始点要怎么选?文章提到,初始点的选择对整个结果不会有太大影响,然而对整个计算时间有很大影响。

下面这个式子给出了“将节点i加入community C带来的modularity的变动:


其中 是该community内部的连接权重总和, 是所有与该community相连的边之权重和。

第二个phase在第一步结果的基础上继续进行:


首先我们有一个原始的网络,然后在第一阶段,使用Modularity Optimization给出一个划分。随后将同一个community进行折叠,折叠后形成一个新的网络,其中:

  • community间的连接权重为连接两个community的节点之权重和
  • community内部的连接形成一个自环,其权重为该community内部连接的和

这两个phase做完一轮后,称作pass;显然每次pass都会让community的数量变小,不过,这个过程其实也是在建立节点间的层次结构hierarchical structure。如下面这个图的例子,虽然左边这个网络是分成了2个组,但其中的一部分可以继续划分。


对此,作者这样说道:

The algorithm is reminiscent of the self-similar nature of complex networks and naturally incorporates a notion of hierarchy, as communities of communities are built during the process

------------

那么现在我们就用站上的数据来做一些preliminary analysis

我们做这个事情,大概有两种思路:一是沿用话题树的结构做连接,二是对问题中的tags作为连接标准。这次我们先做第一种情况。

全站话题结构


可以看到大部分节点都是整合起来的,所谓stongly-connected;颜色代表了不同的community。图太大了,我们选其中一个community来看看。

其中一个community


同一个community仍可以继续进行划分


这里的节点大小是根据Betweenness Centrality调节的...挺有趣的结果。下一次,我们将用另一种方法进行实验。

为什么要做这些?

这样做的目的,大概是为了找到一把适度的尺子,为后面的文本分类做一种标准。

参考阅读

[1] Vincent D. Blondel, Fast unfolding of communities in large networks

[2] Santo Fortunato, Community detection in graphs

Fast unfolding of communities in large networks相关推荐

  1. Fast unfolding of communities in large networks 中文翻译

    Fast unfolding of communities in large networks 中文翻译 摘要 Keywords 1 引言 2 方法 3 应用于大型网络 4 结论和讨论 引用 Blon ...

  2. 文献学习(part99)--Fast unfolding of communities in large networks

    学习笔记,仅供参考,有错必纠 Authors:Vincent D. Blondel, Jean-Loup Guillaume, Renaud Lambiotte, Etienne Lefebvre K ...

  3. 《Fast unfolding of communities in large networks》论文阅读

    2022.5.3 天气晴,白天热晚上冷. physics,2008. <Fast unfolding of communities in large networks> 一.出发点 二.方 ...

  4. 5 Fast unfolding of communities in large networks

    参考https://blog.csdn.net/u010159842/article/details/80335918

  5. 社区发现算法 - Fast Unfolding(Louvian)算法初探

    1. 社团划分 0x1:社区是什么 在社交网络中,用户相当于每一个点,用户之间通过互相的关注关系构成了整个网络的结构,在这样的网络中,有的用户之间的连接较为紧密,有的用户之间的连接关系较为稀疏,在这样 ...

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

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

  7. fast unfolding 算法——论文总结

    一.社区划分问题 1.网络结构和社团结构 在社交网络中,用户相当于每一个点,用户之间通过互相的关注关系构成了整个网络的结构,在这样的网络中,有的用户之间的连接较为紧密,有的用户之间的连接关系较为稀疏, ...

  8. 【图算法】社区发现算法——Fast unfolding

    [图算法]社区发现算法--Fast unfolding 1. 社区划分问题的定义: 2. 社区划分的评价标准: 3. Fast unfolding算法: 3.1 Fast Unfolding算法的基本 ...

  9. 社区发现-Fast Unfolding

    一.简介 在社区划分问题中,存在着很多的算法,如由Newman和Gievan提出的GN算法,标签传播算法(Label Propagation Algorithm, LPA),这些算法都能一定程度的解决 ...

最新文章

  1. 【原拼】从/etc/inetd.conf学习服务(1)
  2. Solr-5.3.0学习笔记(三)Manage Core
  3. 调用face++平台api进行人脸识别
  4. 项目中除了需求外还需要知道的问题
  5. Python 网络爬虫笔记6 -- 正则表达式
  6. JSON与JS对象的区别
  7. Neo4j:Cypher – Neo.ClientError.Statement.TypeError:不知道如何添加Double和String
  8. javafx 表单_JavaFX 2:创建登录表单
  9. php div边框,CSS自定义边框
  10. c语言将链表写入二进制文件_通过逐级遍历将二进制树转换为单链表的C程序
  11. python wordpress建站_WordPress快速建站
  12. matlab2c使用c++实现matlab函数系列教程-exprnd函数
  13. Lucene2.4.0一般查询结果过滤与排行
  14. 小米 note3 android,小米Note3将更新MIUI10:基于安卓8.1 速度提升明显手感更加丝滑...
  15. 数理统计中常用函数、概率分布函数总结
  16. MyEclipse 下载、安装教程
  17. cesium添加天地图,从环境配置到加载天地图
  18. Vpro 相机操作类
  19. strut处理页面请求过程
  20. =default =delete

热门文章

  1. 《Android Studio开发实战》学习(六)- 下拉框
  2. 佛罗里达州一银行发生枪击案 造成至少5人死亡
  3. 我和玩拍网:该死的玩拍
  4. 如何正确理解C语言的文件
  5. 【Adobe Acrobat】裁剪PDF文件中的一小部分并保存成单独页
  6. PDF如何修改,怎么裁剪页面
  7. 【学习笔记】使用Tensorflow版ENet训练自己的数据集labelme生成灰度标签图片问题
  8. 快餐店点餐系统基于javafx
  9. [蓝桥杯]最后十天,冲刺进国赛
  10. 百度云下载速度慢解决方法