目前我能在arxiv上找到的最新的关于社区发现算法系列的综述文了。
正文从这里开始:
2.2 社区发现
现代网络在规模、多样性和复杂性上呈指数增长。 由于网络的变化,各种各样呈现出网络结构的不同类型的网络正在诞生,如物联网数据、无线传感器数据,云数据,学术领域的共同引用和社交网络数据等。
网络中的一个社区是由一组节点构成的,它们彼此高度连接,而不像网络中的其他节点(Yang等人2010)那样拥有相对随机散乱的关系。 社区检测算法的一个关键作用在于可用于从网络中提取有用的信息。 社区检测面临的最大挑战是社区结构没有普遍定义(Fortunato和Hric)2016)(说白了和聚类一样,没标签,不好直接评价效果的好坏,玄学)。 因此,大规模网络中的社区检测是存在较大困难的。
人们提出了大量的技术来在相当快的时间内找到最优的社区, 这些技术大多是基于目标函数的优化。 到目前为止,模块度优化是其中最广泛使用的技术之一。 然而,模块度优化 是一个NP hard的问题。
2.2.1. 前置知识
重要的模块度的概念:
模块度(Modularity)用来衡量一个社区的划分是否优良。一个好的划分结果其表现形式是:在社区内部的节点相似度较高,而在社区外部节点的相似度较低(是不是和聚类的评价一毛一样,实际上个人理解,社区发现可以当作广义的聚类)。
关于模块度的定义,原文列举了模块度定义的更新迭代,给我整晕了,这里我们直接百度搜索最新的模块度定义公式吧:
模块度与Louvain社区发现算法 - CodeMeals - 博客园www.cnblogs.com模块度是评估一个社区网络划分好坏的度量方法,它的物理含义是社区内节点的连边数与随机情况下的边数的差,可以看出,它是一种相对性的指标,它的取值范围是 [−1/2,1),其定义如下:
其中,Aij表示节点i和节点j之间边的权重,网络不是带权图时,所有边的权重可以看做是1,否则即为节点i、j之间的边权重;ki=∑jAij表示所有与节点i相连的边的权重之和(如果是无权图其实就是度数);ci表示节点i所属的社区;m=1/2∑ijAij表示所有边的权重之和(如果是无权图则就是边的数目,这里实际上重复计算了所以前面除以2,也就是Aij和Aji会当作不同的情况计算两次因此除以2)。
模块度的大小定义为社区内部的总边权重和网络中总边权重的比例减去一个期望值,该期望值是将网络设定为随机网络时同样的社区分配所形成的社区内部的总边数和网络中总边数的比例的大小,请注意: