奇技指南
在海量的信息流中,通过精准的算法给用户推荐其感兴趣的内容,已经成为了一个产品吸引用户,获取收益的极其重要的方式。
本篇为算法系列文章,将为大家分享360的算法团队在实践中积累的算法知识及经验,欢迎大家交流分享~
Louvain算法是一种基于多层次优化Modularity的算法,具有快速、准确的优点,在效率和效果上都表现比较好,并且能够发现层次性的社区结构,被认为是性能最好的社区发现算法之一。
模块度
Louvain算法是一种基于图数据的社区发现算法。
原始论文为:
《Fast unfolding of communities in large networks》。
Louvain算法的优化目标为最大化整个数据的模块度,
模块度的计算如下:

其中m为图中边的总数量,k_i表示所有指向节点i的连边权重之和,k_j同理。A_{i,j} 表示节点i,j之间的连边权重。
有一点要搞清楚,模块度的概念不是Louvain算法发明的,而Louvain算法只是一种优化关系图模块度目标的一种实现而已。
Louvain算法的两步迭代设计
最开始,每个原始节点都看成一个独立的社区,社区内的连边权重为0
步骤1
算法扫描数据中的所有节点,针对每个节点遍历该节点的所有邻居节点,衡量把该节点加入其邻居节点所在的社区所带来的模块度的收益。并选择对应最大收