一、模块度的局限性

(1)判断网络是否具有较强的社团结构一种方法是把一个给定网络与该网络相应的随机化模型做对比。通常做法是通过随机重连方式生成许多具有相同度序列的随机化网络,并计算这些网络的模块度的均值和方差,分别记为< Q >NM_{NM}NM​和δQNM\delta_Q^{NM}δQNM​,然后计算给定网络的最大模块度Qmax_{max}max​的统计重要性:

如果ZQ_QQ​>0,就可以认为网络具有社团结构,并且ZQ_QQ​越大就表明网络的社团结构越强。但是问题来了:一些大家公认不具有较强社团结构的网络也会具有较大的ZQ_QQ​值;大家公认具有明显社团结构的网络却具有很小的ZQ_QQ​值。
(2)模块度另一个更为重要的问题是分辨率限制:它无法识别出规模充分小的社团。

二、派系过滤算法

在上篇文章介绍的算法中,一个节点只能被划分到一个社团。然而大规模实际网络的社团结构往往具有重叠性特征,即网络中会存在一些”骑墙节点“,每一个骑强节点都会同时属于多个社团。所以人们提出了一种派系过滤算法来分析具有重叠性的社团结构,并编制了相应软件CFinder。

1、k-派系社团的定义

k-派系是网络中包含k各节点的全耦合子图,即这k个节点中任意两个节点都有边相连。如果两个k-派系有k-1个公共节点那么就称这两个k-派系是相邻的。如果一个k-派系可以通过若干个相邻的k-派系到达另一个k-派系,就称这俩个k-派系是彼此连通的。网络中由所有彼此连通的k-派系构成的集合就称为一个k-派系社团。下图为4-派系社团。

2、寻找网络中的派系

在派系过滤算法中,采用由大到小、迭代回归的算法来寻找网络中的派系。首先,从网络中各节点的度可以判断网络中可能存在的最大全耦合子图的大小。从网络中一个节点出发,找到所有包含该节点的大小为s的派系后,删除该节点以及与之相连的边(以避免多次找到同一个派系)。然后,另选一个节点,重复上述步骤,直到网络中没有节点为止。至此,找到了网络中大小为s的所有派系。接着,逐步减小s,每次s值减小1,再用上述方法便可寻找到网络中所有不同大小的派系。
这里的关键是如何从一个节点v出发寻找包含它的所有大小为s的派系。为此,首先定义两个集合A和B:集合A为包括节点v在内的两两相连的所有结点的集合。而集合B则为与集合A中各结点都相连的结点的集合。为了避免重复选到某个节点,对集合A和B中的节点都按节点序号顺序排列。
寻找包含节点v的所有大小为s的派系的迭代回归算法如下:
(1)初始集合A={v},B={v的邻居};
(2)从集合B中移动一个节点到集合A,同时删除集合B中不在与集合A中所有节点相邻的节点;
(3)如果在集合A的大小未达到s之前,集合B已为空集,或者集合A和B为已有的一个较大的派系中的子集,则停止计算,返回上一步。否则,当集合A的大小达到s,就得到一个新的派系,记录该派系,然后返回上一步,继续寻找包含节点v的新的派系。

3、利用派系寻找k-派系社团

找到网络中所有的派系以后,就可以得到这些派系的重叠矩阵。该矩阵是一个对称方针,每一行(列)对应于一个派系,对角线上的元素表示相应派系的大小(即派系所包含的节点数目)。在派系重叠矩阵中,将对角线上小于k而非对角线上小于k-1的元素置为0,其它元素置为1,就可以得到k-派系的社团结构邻接矩阵,各个连通部分分别代表各个k-派系的社团。

三、连边社团检测算法

此算法的新思路是一个社团是一组紧密相连的连边的集合,而不是通常定义的紧密相连的节点的集合。这样定义的好处是一条边只能属于一个社团。
连边社团检测算法的基本步骤就是把具有一定相似度的连边合并为一个社团。此时需要给出连边相似度的定量刻画。假设初始时我们把网络中的每一天边都看作一个社团,现在要把其中的两条边合并为一个社团,一个自然的要求就是这两条边应该是连在一起的,即有一个公共节点。具有一个公共节点k的一对连边eik_{ik}ik​和ejk_{jk}jk​之间的相似度的合理定义就是考虑节点对i和j之间的相似度。
定义连边对eik_{ik}ik​和ejk_{jk}jk​之间的相似度如下:

其中n+_++​(i)为节点i及其所有邻居节点的集合。

上图连边的相似度为4/12=1/3。
利用连边的相似度定义,就可以用分级聚类方法来检测网络社团结构。具体步骤如下:
(1)计算网络中所有相连的连边对即至少拥有一个共同节点的连边对的相似度,并根据相似度的值按降序排列这些连边对。
(2)按排列次序依次将连边对所属社团进行合并,将合并过程以树图的形式记录下来。这里,如果一些连边对具有相同的相似度,那么就在同一步进行合并。
(3)社团的合并过程可进行到某一步为止,至多可进行到所有的连边都属于一个社团。
在上述操作过程中,两个社团融合时所对应的相似度值称为融合社团的强度,并对应于树图分支的高度。
为了得到最佳的社团结构,需要确定分割树图的最佳位置,或者等价的,确定社团合并过程进行到哪一步是最佳的。为此,基于社团内部的连边密度定义一个目标函数,称为划分密度D。假设一个包含M条连边的网络被划分为C个社团{P1_11​,P2_22​,,Pc_cc​},其中社团Pc_cc​包含mc_cc​条连边和nc_cc​个节点,它所对应的归一化密度定义为:

其中nc_cc​-1是使得nc_cc​个节点构成连通图所需的最少连边数,而nc_cc​(nc_cc​-1)/2则是nc_cc​个节点之间最大可能的连边数。这里,如果nc_cc​=2,那么定义Dc_cc​=0。整个网络的划分密度就定义为Dc_cc​的加权和:

由于上式求和中的每一项都局限在社团内部,从而使得划分密度避免了模块度具有的分辨率限制问题。通过计算连边树图每一层所对应的划分密度或者直接优化划分密度就可以得到最佳的社团划分。

四、社团检测算法的评价标准

1、基准图方法

对于把社团检测算法应用于实际网络分析,算法的好坏取决于两点:
(1)时间:算法能否早可接受的时间内给出社团划分结果。
(2)性能:算法能否高质量地揭示出实际网络的社团结构。

2、元数据方法

为了定量比较不同社团划分算法的效果,可以引入以下几个指标:
(1)社团质量:相似的节点应该共享尽可能多的元数据。
(2)重叠质量:对于网络中的每个节点i,我们从元数据中提取一个标量(称为重叠元数据),它对应于节点i所属的真实社团的数目。
(3)社团覆盖: 计算属于非平凡社团(即有3个或以上节点的社团)的节点所占的比例。
(4)重叠覆盖:计算每个节点所属的非平凡社团的数目的平均值。两个算法可能具有相同的社团覆盖度,但是一个算法有可能比另一个算法提取出更多的重叠节点。对于不具有检测重叠性的社团算法,重叠覆盖度与社团覆盖度是一样的。

除了基于模块度之外的其它社团检测算法相关推荐

  1. 基于模块度的社团检测算法

    一.CNM算法 该算法是基于贪婪算法思想的社团结构检测算法,该算法的计算复杂度为O(nlog2^22n),算法代码可以从网上搜到.CNM算法采用堆数据结构计算和更新模块度,具体描述如下: (1)初始化 ...

  2. 图算法(十三):Louvain算法【适用场景:用于社团发掘、层次化聚类等场景】【基于模块度的社区发现算法,其优化目标是最大化整个社区网络的模块度】

    一.概述 Louvain算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其优化目标是最大化整个社区网络的模块度. 适用场景:Louvain算法适用于社团发 ...

  3. matlab计算胎心率,基于盲分离的胎心音心率检测算法与实现

    基于盲分离的胎心音心率检测算法与实现 胎心监护是保障胎儿和产妇安全,实现国家优生优育的重要手段,在围产阶段对母体内的胎儿进行监护,可以在了解胎儿发育状况的同时,大大地减少因缺氧.缺血而出现的窘迫,导致 ...

  4. 【积】louvain社团检测算法(python)代码图片双解(一)

    louvain社团检测算法(python) 这里写目录标题 louvain社团检测算法(python) 壹.完整代码 贰.分步解释 1.为网络中的每个节点分配一个社团: 2. 算法初始化 3. 第一阶 ...

  5. 笔记《基于无人驾驶方程式赛车的传感器融合目标检测算法研究及实现》

    论文结构 关键字:无人驾驶方程式赛车,相机,激光雷达,目标检测,传感器融合 一.绪论 1. 感知技术研究现状 1.1.1 基于相机的目标检测技术研究现状 1.1.2 基于激光雷达的目标检测技术研究现状 ...

  6. 基于激光雷达点云的3D目标检测算法论文总结

    作者丨eyesighting@知乎 来源丨https://zhuanlan.zhihu.com/p/508859024 编辑丨3D视觉工坊 前言  过去很多年激光雷达的车规标准和高昂价格是阻碍其量产落 ...

  7. matlab rgb 到 ycgcr,基于混合肤色模型的快速人脸检测算法

    摘   要: 提出了一种基于混合肤色模型" title="肤色模型">肤色模型" title="肤色模型">肤色模型" ...

  8. 目标检测YOLO实战应用案例100讲-基于激光雷达点云的三维目标检测算法研究

    目录 基于激光雷达点云的三维目标检测算法研究 基于投影图的方法 基于点云的多模态融合方法

  9. 基于人眼纵横比计算的人眼闭合检测算法

    基于人眼纵横比计算的人眼闭合检测算法 原理 实验 源代码 结语 原理 PDlib是基于现代C++的通用多平台框架,在机器学习和图像处理领域提供了一系列相关功能 它在人脸检测中,将人脸视为可分的68个数 ...

最新文章

  1. python 调用摄像头拍照_《自拍教程67》Python调用摄像头, 拍照拍照!
  2. 制定统一业务逻辑基础规则
  3. Java笔记11-软件开发流程设计原则
  4. 3层vni vxlan_什么是VXLAN 三层网络搭建二层网络的设计方案
  5. mysql-回表查询是什么
  6. 解决 vscode 登录微软账户同步设置 出现“vscode.dev 关闭了连接“ 问题
  7. 以下哪些不是Linux操作系统特点,[多选] Linux操作系统具有以下()特点。
  8. IRP IO_STACK_LOCATION 《寒江独钓》内核学习笔记(1)
  9. IE8打开网页慢速度优化
  10. VBA按座次排位(交错排座,向一侧或两侧排座,混合排座)
  11. vos3000 更换ip具体操作方法
  12. 自己动手写Spring-1-简单的IOC实现
  13. Linux系统各发行版镜像下载(持续更新)---download
  14. elementUI合并表头
  15. The halting problem
  16. 快速过一遍计算机基础--操作系统—4.文件管理
  17. 面向可维护性的设计模式
  18. OpenJudge NOI 1.5 编程基础之循环控制(21-30题)C++ 解题思路
  19. 2.架设邮件服务器-windows 2003 POP3服务,SMTP服务收发邮件
  20. Dart plugin not installed; this adds Dart specific functionality. Flutter plugin not installed;

热门文章

  1. ACL 2021 | 基于依存句法驱动注意力图卷积神经网络的关系抽取
  2. 技术实践:大规模知识图谱预训练及电商应用
  3. NeurIPS 2020 | 一种基于动作采样的简单高效的正则化强化学习方法
  4. 深入浅出在NIO技术中,如何理解直接缓冲区要比非直接缓冲区效率高?
  5. 【安全系列之加密算法】常用安全的加密算法
  6. jfinal出现sql injection violation, multi-statement not allow : select count(*) select a.name,
  7. CG CTF PWN When did you born?
  8. php 以-截取剩余的字符串_10分钟从PHP到Python
  9. windows查看java进程详细信息的几种方法
  10. hive加载大文件(3G)