初识机器学习:Louvain 社区发现算法

1,279 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

本篇介绍一种社会网络分析算法 Louvain,Louvain 是一个基于模块度的社区发现算法,可以高效地在网络中找出群组。

社会网络分析

社会网络分析(Social network analysis, SNA)是一种使用网络和图来分析社会化结构的一种方法。可以运用于多个领域,比如社交媒体、知识网络、病毒式营销、传染病建模等等。

Louvain 算法可以在一个网络中找出群组,比如,识别社交媒体中熟人关系网络中的社交圈子、识别国际贸易关系网络中的利益联盟,等等。

Louvain 的基本原理简述

在一个网络中,存在「节点」和「边」两种元素。一个节点代表网络中的一个个体,比如社交网络中的一个人,边则表示被它连接的两个节点之间的关系,比如,连接 A 和 B 两个节点的边,表示一个社交网络中 A 和 B 是好友关系,除此之外,还可以用权重(比如表现为边的粗细)来表示两者之间关系的强弱。

Louvain 算法的目标是在一个网络中识别群组,使得:

  • 同一个群组中的节点之间,边的数量和强度最大化
  • 属于不同群组的边数和强度最小化

这个目标其实跟聚类算法要实现的最终目标很相似(02. 初识机器学习:k均值聚类 )。它们的运算原理其实也很相似,需要一个初始的状态,然后通过重复执行几个步骤,不断迭代,最终达到理想的状态:

  1. 把每一个节点都看成一个小的群组。
  1. 对每一个节点执行操作:把它重新分配给能最提高模块度的群组,如果无法在提高模块度,则不进行重新分配。
  1. 把上一步中发现的每一个群组作为一个节点,并将之前群组之间的边合并成新的带权重的边。
  1. 重复第 2 步和第 3 步,直到无法再进行分配。

局限性

Louvain 的到的结果包含的一些缺陷,与聚类算法也很类似,那就是它无法找出有重叠或者嵌套关系的群组。并且,它无法识别一些规模较小但是比较重要的群组,如果需要找到这些群组,只能人为干预。