社区检测算法(Community Detection)总结
社区检测(Community Detection)又被称为是社区发现。它是用来揭示网络聚集行为的一种技术。社区检测算法用于评估节点组如何聚类或分区,以及它们增强或分离的趋势。
社区检测(Community Detection)
社区检测(Community Detection)又被称为是社区发现。它是用来揭示网络聚集行为的一种技术。
社区检测算法用于评估节点组如何聚类或分区,以及它们增强或分离的趋势。
社区
社区是许多网络的属性,其中一个特定的网络可能有多个社区,因此社区内的节点是密集连接的。 多个社区中的节点可以重叠。例如日常中的微信、QQ、抖音,我们每天可能会与自己的朋友、同事、家人和生活中其他一些重要的人进行大量互动。它们在我们的社交网络中形成了一个非常密集的社区。
就图而言,社区可以定义为节点的子集,这些节点彼此紧密连接,而与同一图中其他社区中的节点松散连接。(网络节点在社区内紧密连接成紧密的组,而社区之间则松散连接。)
对于日常微信、QQ或 抖音 等社交媒体平台,我们试图在这些平台上与其他人联系。最终,一段时间后,我们最终与属于不同社交圈的人建立了联系。这些社交圈可以是一群亲戚、同学、同事等。这些社交圈也就是社区!
每个社区是一个子图,包含顶点和边。
社区检测
社区检测(community detection)又被称为是社区发现,它是用来揭示网络聚集行为的一种技术。社区检测实际就是一种网络聚类的方法,这里的“社区”,我们可以将其理解为一类具有相同特性的节点的集合。
社区检测算法的一个关键作用在于可用于从网络中提取有用的信息。 社区检测面临的最大挑战是社区结构没有普遍定义(与和聚类类似,没标签,无法直接评价效果的好坏)。
为什么要社区检测?
- 在分析不同的网络时,发现其中的社区可能很重要。
- 社区检测技术对于社交媒体算法很有用,可以发现具有共同兴趣的人并保持他们紧密联系。
- 社区检测可用于机器学习中,以检测具有相似属性的组并出于各种原因提取组。例如,该技术可用于发现社交网络或股票市场中的操纵群体。
社区检测与聚类的对比分析
- 聚类是一种机器学习技术,其中相似的数据点根据它们的属性被分组到同一个簇中。尽管聚类可以应用于网络,但它是无监督机器学习中一个更广泛的领域,可以处理多种属性类型。聚类算法倾向于将单个外围节点与其应属于的社区分开。
- 社区检测是专门为网络分析量身定制的,网络分析依赖于称为边的单一属性类型。
社区检测类似于聚类,但是,聚类和社区检测技术都可以应用于许多网络分析问题,并且可能会根据领域产生不同的优缺点。
鲁汶算法(Louvain )
鲁汶方法是一种检测大型网络中社区的算法。它最大化了每个社区的模块化分数,其中模块化量化了分配给社区的节点的质量。这意味着评估社区中节点的密集程度,以及它们在随机网络中的连接程度。
Louvain 算法是一种分层聚类算法,它以递归方式将社区合并到单个节点中,并在压缩图上执行模块化聚类。(这意味着在每个群集步骤之后,属于同一群集的所有节点都将减少到单个节点。同一集群节点之间的关系成为自有关系,与其他集群节点的关系连接到集群代表。然后,此精简图用于运行下一级别的聚类分析。重复该过程,直到群集稳定。)
在社区检测的Louvain方法中,首先通过在所有节点上局部优化模块化来找到小社区,然后将每个小社区分组为一个节点,并重复第一步。即为迭代重复两个阶段:
- 节点的局部移动
- 网络聚合
该算法从 N 个节点的加权网络开始。在第一阶段,算法为网络的每个节点分配一个不同的社区。然后对于每个节点,它考虑邻居并评估模块化增益通过从当前社区中删除特定节点并放置在邻居的社区中。如果增益为正且最大化,则该节点将被放置在邻居的社区中。如果没有正收益,该节点将留在同一个社区中。这个过程被重复应用到所有节点,直到没有进一步的改进。当获得局部最大值时,Louvain 算法的第一阶段停止。在第二阶段,该算法将在第一阶段找到的社区作为节点来构建一个新的网络。一旦第二阶段完成,算法会将第一阶段重新应用于生成的网络。重复这些步骤,直到网络没有变化并且获得最大的模块化。
莱顿社区检测(Leiden)
莱顿算法是一种用于检测大型网络中的社区的算法。该算法将节点分离成不相交的社区,从而最大化每个社区的模块化得分。模块化量化了将节点分配给社区的质量,即社区中节点的密集连接程度,与它们在随机网络中的连接程度相比。
Leiden算法是一种分层聚类算法,它通过贪婪地优化模块化和在压缩图中重复的过程,递归地将社区合并到单个节点中。它修改了鲁汶算法以解决其一些缺点,即鲁汶发现的一些社区联系不紧密的情况。这是通过定期将社区随机分解为较小的连接良好的社区来实现的。
莱顿算法的三个阶段是:
- 节点的局部移动
- 分区的细化
- 基于细化分区的网络聚合
在细化阶段,算法试图从第一阶段提出的分区中识别出细化的分区。第一阶段提出的社区可能在第二阶段进一步分裂成多个分区。细化阶段不遵循贪心方法,并且可能将节点与随机选择的社区合并,从而增加质量函数。这种随机性允许更广泛地发现分区空间。同样在第一阶段,莱顿对鲁汶采取了不同的方法。与第一次访问所有节点完成后访问网络中的所有节点不同,Leiden 只访问那些邻域发生变化的节点。
louvain的缺点:
1、社区划分的精度有局限性
2、分组内细胞分布密度的大小会影响亚群的鉴定
3、被鉴定为同一个分群的细胞群内,存在两个没有连线的小分群
Leiden算法主要针对上述的第3个缺点,对louvain算法进行优化。Leiden算法的命名来源于荷兰莱顿大学(Leiden University)。该算法由莱顿大学的三位研究员开发,结果于2020年3月份发表在Scientific Reports上。
Leiden和louvain算法的调整策略不同:
1、Louvain:让每个同学去另外两个队伍,每次换队伍都让体育老师评价一下;
2、Leiden:只让每个同学去有连线的其他队伍,节省时间。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)