社区发现算法总结(一)nolonely

在社区发现算法中,几乎不可能先确定社区的数目,于是,必须有一种度量的方法,可以在计算的过程中衡量每一个结果是不是相对最佳的结果。

模块度(Modularity)用来衡量一个社区的划分是不是相对比较好的结果。一个相对好的结果在社区内部的节点相似度较高,而在社区外部节点的相似度较低。

全局模块度

设AVW为网络的邻接矩阵的一个元素,定义为:

假设cv和cw分别表示点v和点w所在的两个社区,社区内部的边数和网络中总边数的比例:

函数δ(cv,cw)的取值定义为:如果v和w在一个社区,即cv=cw,则为1,否则为0。m为网络中边的总数。

模块度的大小定义为社区内部的总边数和网络中总边数的比例减去一个期望值,该期望值是将网络设定为随机网络时同样的社区分配所形成的社区内部的总边数和网络中总边数的比例的大小,于是模块度Q为:

其中kv表示点v的度。

设eij表示社区i和社区j内部边数目的和与总边数的比例,ai表示社区i内部的点所关联的所有的边的数目与总边数的比例。

为了简化Q的计算,假设网络已经划分成n个社区,这个时候就有一个n维矩阵,Q的计算可以变成:

在进行每次划分的时候计算Q值,Q取值最大的时候则是此网路较理想的划分。Q值的范围在0-1之间,Q值越大说明网络划分的社区结构准确度越高,在实际的网络分析中,Q值的最高点一般出现在0.3-0.7之间。

局部模块度

有时候,可能不知道全网络的数据,可以用局部社区的局部模块度的方式来检查社区的合理性。假设有一个已经检测出来的社区,社区的节点的集合为V,这些节点所有的邻接节点而加入到集合当中来,形成新的集合V*。定义V*的邻接矩阵为:

于是,和全局模块度相似的是,可以用节点集V*全部属于节点集V中的元素所占的比例的大小来衡量一个社区的好坏:

其中,δ(i,j)表示的是如果i,j都是V中则值为1,否则为0。m*表示的是邻接矩阵内边的数目。

局部模块度比全局模块度要快的多,因为局部模块度的计算只需要用到局部的网络信息,只需要在刚刚开始的时候扫描一下整个网络。对于中小规模的网络可能局部模块度的效果要低于全局模块度,但是而且对于中等或者大规模的社会网络来说,局部模块度的效果可能还要好一些。

参考资料:

图分割方法大多是基于迭代二分法的,基本思想是将图分割成两个子图,然后迭代,最后得出要求的子图数。经典的算法有Kernighan-Lin算法和谱二分算法。

K-L(Kernighan-Lin)算法是一种将已知网络划分为已知大小的两个社区的二分方法,它是一种贪婪算法。它的主要思想是为网络划分定义了一个函数增益Q,Q表示的是社区内部的边数与社区之间的边数之差,根据这个方法找出使增益函数Q的值成为最大值的划分社区的方法。具体策略是,将社区结构中的结点移动到其他的社区结构中或者交换不同社区结构中的结点。从初始解开始搜索,直到从当前的解出发找不到更优的候选解,然后停止。

K-L算法的缺陷是必须先指定了两个子图的大小,不然不会得到正确的结果,实际应用意义不大。

谱二分算法

当网络中存在两个社区结构时,就能够根据非零特征值所对应的特征向量中的元素值进行结点划分。把所有正元素对应的那些结点划分为同一个社区结构,而所有负元素对应的结点划分为另外一个社区结构。

谱二分算法利用的是Laplace矩阵的特征值和特征向量的性质来做社区划分。Laplace矩阵的第二小特征值λ2的值越小,划分的效果就越好。所以谱二分法使用Laplace矩阵的第二小特征值来划分社区。

谱平分法的缺陷是,一次只能划分2个社区,如果需要划分多个,需要执行多次。如果只需要划分两个社区,谱平分法的效率比较高,但是要划分多个社区的时候,铺平分法的效率就不高了,它的优点也不能得到充分的体现,而且准确度也可能会降低。

重要概念

边介数(betweenness):网络中任意两个节点通过此边的最短路径的数目。

GN算法的思想:

在一个网络之中,通过社区内部的边的最短路径相对较少,而通过社区之间的边的最短路径的数目则相对较多。下图中展示了变得强度以及边介数在现实网络中的分布情况。GN算法是一个基于删除边的算法,本质是基于聚类中的分裂思想,在原理上是使用边介数作为相似度的度量方法。在GN算法中,每次都会选择边介数高的边删除,进而网络分裂速度远快于随机删除边时的网络分裂。

GN算法的步骤如下:(1)计算每一条边的边介数;(2)删除边界数最大的边;(3)重新计算网络中剩下的边的边阶数;(4)重复(3)和(4)步骤,直到网络中的任一顶点作为一个社区为止。

GN算法示例:

GN算法的R分析代码

>library("igraph")>karate<-graph.famous("Zachary")>ebc<-edge.betweenness.community(karate)>ebcGraphcommunitystructurecalculatedwiththeedgebetweennessalgorithmNumberofcommunities(bestsplit):5Modularity(bestsplit):0.4012985Membershipvector:[1]1121333145311144314141442242244244>modularity(ebc)[1]0.4012985>membership(ebc)[1]1121333145311144314141442242244244>plot(ebc,karate)

GN算法通过模块度可以准确的划分网络,但它只适用于中小型规模的网络。Newman提出一种基于贪心的快速社区发现算法,算法的基本思想是:首先将网络中的每个顶点设为一个单独社区,然后选出使得模块度Q的增值最大的社区对进行合并;如果网络中的顶点属于同一个社区,则停止合并过程。整个过程是自底向上的过程,且这个过程最终得到一个树图,即树的叶子节点表示网络中的顶点,树的每一层切分对应着网络的某个具体划分,从树图的所有层次划分中选择模块度值最大的划分作为网络的有效划分。

设网络有n个节点,m条边,每一步合并对应的社区数目为r,组成一个r*r矩阵e,矩阵元素eij表示社区i中的节点与社区j中节点之间连边的数目在网络总变数的百分比。

主要步骤:

(1)初始化网络,开始网络有n个社区,初始化的eij和ai为:

(2)依次按照Q的最大或者最小的方向进行合并有边相连的社区对,并计算合并后的模块度增量Q:

(3)合并社区对以后修改对社区对称矩阵e和社区i和j对应的行列;

(4)重复执行步骤(2)和(3),不断合并社区,直至整个网络合并成一个社区为止。

Newman快速算法的R分析代码

>karate<-graph.famous("Zachary")>fc<-fastgreedy.community(karate)>dendPlot(fc)

THE END
1.社区Edge AI是边缘计算的研究方向之一,它将人工智能算法和模型推送到边缘设备,使其具备处理复杂数据的能力。随着硬件的不断进步,越来越多的智能设备能够在本地进行推理和决策,而无需将数据发送到云端。Intel和NVIDIA等公司也在加速边缘计算硬件的研发,提升计算能力以应对复杂的AI任务。 https://open.alipay.com/portal/forum/post/192201027
2.算法和“信息茧房”需要找到平衡点一是几乎没有经验证据证明算法必然会导致“信息茧房”。人们处于多元且复杂的信息环境中,很难完全避免观点不一致的内容。西方一些实证研究发现,“信息茧房”指向长期效果,而算法不是单一、静态的,而是动态的、不断优化中的,用户会主动互动、分享信息,接触各种各样的平台。另有研究发现,情感是用户在线行为的影响因素。https://rmydb.cnii.com.cn/html/2024/20241219/20241219_003/20241219_003_01_8689.html
3.臭东西的学习笔记基于决策变量分类的动态多目标优化算法多样性引入和相结合基于聚类减少负迁移学习的动态多目标优化基于的角度通过自动编码进化搜索解决动态多目标问题基于多样性方法和的相结合动态约束多目标问题的一种新进化算法多样性和相结合的方法基于流形迁移学习的快速动态多目标进化算法基于记忆和的方法结合。 2023-10-14 13:31:https://blog.csdn.net/choudongxi
4.干货社区发现算法FastUnfolding的GraphX实现社区发现综述 社区发现作为网络科学的经典问题之一,长期受到研究者的广泛关注。 Girvan等人使用 GN算法 进行求解,首先求解每条边的介数(betweenness),然后将介数最大的边删去,再重新求解每条边新的介数,依此循环。对应图1,连接不同社区的边的介数最大,把它们删去后即可得若干个独立的社区。但是求解介数时间复杂度高,在https://cloud.tencent.com/developer/article/1365899
5.社交网络中的社区发现算法社区发现(一)--算法综述 网络分解为2个规模已知的社区。该算法为网络的划分引入一个增益函数,定义为两个社区内部的边数与两个社区边数之间的差,寻求Q的最大划分办法。 2.1.3 最大流算法基于最大流的算法是G.W.Flake 1.社区发现简介社区,从直观上来看,是指网络中的一些密集群体,每个社区内部的结点间的https://www.pianshen.com/article/18321255864/
6.三角形处理算法(精选八篇)一种基于三角环的社区发现算法 篇5 尽管人们对复杂网络的社区发现问题已进行了大量的研究,但是仍然还存在一些目前无法解决的问题,如社区的概念虽然大量使用,但缺乏严格的数学定义;大多数的发现算法计算量很大;很多算法不是针对异构数据集。因此,复杂网络中的社区发现研究还远没有形成体系,有许多工作有待于进一步完善[8https://www.360wenmi.com/f/cnkey29v2lir.html
7.《社会化媒体中的社区发现研究综述.pdf》社会化媒体中的社区发现研究综述.pdf 10页VIP内容提供方:july77 大小:745.12 KB 字数:约2.52万字 发布时间:2015-07-30发布于安徽 浏览人气:15 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)社会化媒体中的社区发现研究综述.pdfhttps://m.book118.com/html/2015/0730/22324574.shtm
8.[ML]CommunityDetection社群发现算法文献综述3.1 传统社群发现算法 3.1.1 图分割 3.1.1.1 Kernighan & Lin algorithm - K-L算法 K-L(Kernighan-Lin)算法是一种将已知网络划分为已知大小的两个社区的二分方法,它是一种贪婪算法。它的主要思想是为网络划分定义了一个函数增益Q,Q表示的是社区内部的边数与社区之间的边数之差,根据这个方法找出使增益函数Qhttps://www.jianshu.com/p/712d1f4c7fbb
9.深度学习助力网络科学:基于深度学习的社区发现最新综述实验室、天津大学、伊利诺伊大学芝加哥分校共同发表了题为「A Comprehensive Survey on Community Detection with Deep Learning」的综述论文,该论文是对该团队于 IJCAI 2020 上发表的论文「Deep Learning for Community Detection: Progress, Challenges and Opportunities」的扩展,详细综述了基于深度学习的社区发现最新研究http://baijiahao.baidu.com/s?id=1704344707681891080&wfr=spider&for=pc
10.基于随机游走的社区发现方法综述第44 卷第 6 期 2023 年 6 月 通信学报 Journal on Communications Vol.44 No.6 June 2023 基于随机游走的社区发现方法综述 高阳 1,2,张宏莉 2 (1. 传播内容认知全国重点实验室,人民网,北京 100733;2. 哈尔滨工业大学网络空间安全学院,黑龙江 哈尔滨 150001) 摘要:随机游走技术可实现准确,高效的社区发现.为https://www.infocomm-journal.com/txxb/CN/article/downloadArticleFile.do?attachType=PDF&id=173546
11.社区发现算法综述社区发现算法综述 1 前言 《Network Community Detection: A Review and Visual Survey》 目前我能在arxiv上找到的最新的关于社区发现算法系列的综述文了。 2 社区发现 现代网络在规模、多样性和复杂性上呈指数增长。 由于网络的变化,各种各样呈现出网络结构的不同类型的网络正在诞生,如物联网数据、无线传感器数据,https://zhuanlan.zhihu.com/p/141401358
12.社区发现算法范文7篇(全文)社区发现算法 第1篇 复杂网络[1]是现实世界中复杂系统的一种抽象表现形式, 网络中的节点是复杂系统中的个体, 节点之间的边则是系统中个体之间按照某种规则而自然形成或人为构造的一种关系。网络节点被划分成若干组, 使得组内节点之间的连接比较稠密, 而不同组节点之间的连接则比较稀少, 这样的划分结果被定义为复https://www.99xueshu.com/w/ikey4ya2y1w7.html
13.社区发现算法包java社区发现算法的评价网猴儿的技术博客《基于标签传播的社区挖掘算法研究综述》王庚等 基础概述 开始了解社区发现的时候,我以为这只是一种算法。后来深入下去才知道,它的状态是,上有老下有小的情况。 向上走:社区发现 复杂网络聚类 图论 由于项上走实在知识面太广,有待后期学习。所以决定先往下走。 https://blog.51cto.com/u_14126/8968124
14.大数据视角下的京津冀地区城市体系现状1.2.4 社区发现算法 社区发现算法用于发现网络中的社区结构[27].在社交网络中,每位用户都相当于一个点,用户之间通过互相的关注关系构成了整个网络的结构,在这样的网络中,有的用户之间连接较为紧密,有的用户之间连接关系较为稀疏,连接较为紧密的部分可以被看成是一个社区,其内部的节点之间有较为紧密的连接,而隶属https://jsci.cnu.edu.cn/qkll/a2020n/d6q/202006011.html
15.社交网络社区划分算法的研究社交网络社区划分算法的研究张琪 近年来,研究社交网络的热潮开始在国内外盛行。很多复杂系统都可以用网络来刻画,例如社交网络、电力网、新陈代谢网络和Internet网络等复杂网络系统。复杂网络通常会呈现出社区结构的特性,即社区内的节点关系紧密,而社区之间的节点关系稀疏。在实际网络中如何高效的发现社区结构,成为了社交https://wap.cnki.net/lunwen-1014041319.nh.html
16.社区发现算法daiwk社区发现算法 目录 参考https://blog.csdn.net/u012369559/article/details/78713500 https://github.com/benedekrozemberczki/awesome-community-detection nature上的文章:https://www.nature.com/articles/srep30750.pdfwikipediahttps://en.wikipedia.org/wiki/Community_structurehttps://daiwk.github.io/posts/other-community-discovery.html
17.社区发现算法——louvain完全解读根据tot的定义,tot表示所有与社区连接的外部的edges的权重之和,那么对于单个node来说,其与外部社区连接的edges的权重之和其实就是,所有与节点 i 相连的边的权重之和,也就是这里的Ki,那么公式一套进去就得到结果了。。。)因此我们的模块度增益的最终公式是: https://paper.yanxishe.com/columndetail/24701
18.科学网—关于社区发现算法关于社区发现算法 今天听了实验室一个博士的论文答辩,是做关于复杂网络的社区结构研究的。原来也了解社区结构发现和一些算法,但今天才真正了解了社区结构发现算法的分类。社区结构发现包括不允许重叠和允许重叠的社区结构发现。所谓重叠,即表示某个点可同时属于多个社区。重叠节点通常有一些特别的功能和解释,例如,在论文https://blog.sciencenet.cn/blog-383950-288686.html
19.社区发现CommunityDetection算法1、社区发现(Community Detection)算法 社区发现(Community Detection)算法用来发现网络中的社区结构,也可以视为一种广义的聚类算法。以下是我的一个 PPT 报告,分享给大家。 从上述定义可以看出:社区是一个比较含糊的概念,只给出了一个定性的刻画。另外需要注意的是,社区是一个子图,包含顶点和边。 下面我们以新浪https://www.renrendoc.com/paper/176699872.html
20.基于网络社区发现的标签传播聚类算法2.4 社区优化合并 将向量表示的数据集进行网络化, 一般情况下要求构建的网络在确保全连通的前提下尽量稀疏, 网络中节点度通常不满足幂律分布. 用社区发现算法进行节点聚类, 在未指定社区数量的情况下, 得到的社区数通常会大于真实的簇的数量, 所以需要进行优化合并.https://c-s-a.org.cn/html/2020/12/7712.html