社区发现算法-Community Detection-NormalizeCut/Louvain/NMF/LPA

本文详细介绍了几种社区检测算法,包括正则化割(Normalized Cut)、Louvain算法、非负矩阵分解(NMF)和标签传播算法(LPA)。通过对图聚类的探讨,展示了这些算法的工作原理和应用场景,如图谱的模块度优化和数据点的聚类。文章还涵盖了算法的实现细节和实验比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文结构安排

  • 图聚类简介

  • 正则化割

  • Louvain

  • 非负矩阵分解(NMF)

  • 其他常见方法

  • 图(graph):是一种由点和边集构成的结构G=(V,E)G=(V,E)G=(V,E)

  • 图聚类(graph clustering) : 将点划分为不同的簇,使得簇内的边尽量多,簇之间的边尽量少。也称为图划分(partitioning)社区检查(community detection)

应用Louvain算法产生的社区检测图示

community.png

Normalized cut

正则化割的基本原理是使各簇之间的割最小,但不是算其最小割,因为这会使相对孤立的边缘点“自成一团”,造成社区大小的不均衡。算法的基本过程的前半部分类似于谱聚类,先由度矩阵和邻接矩阵,计算出拉普拉斯矩阵,得到第二小到K+1小的特征向量,对其进行K-means聚类,预处理得到k’个簇。之后,计算两两簇合并之后,计算其正则化割,选择正则化割最小的两个簇合并。每次合并减小一个簇,直到减小到K个簇。

k-路划分:

(1)计算相似度矩阵W和度矩阵D

(2)计算标准化拉普拉斯矩阵D−12(D−W)D−12D^{-\frac{1}{2}}(D−W)D^{-\frac{1}{2}}D21(DW)D21

(3)从第二小的特征值开始找k’k’k个最小的特征值对应的特征向量构造n⋅k′n \cdot k′nk维度的特征矩阵F

(4)对特征矩阵F按行进行标准化后,进行Kmeans聚类得到k’k’k

(5)在这k’k’k个簇中,每次选取两个簇进行合并,直到最后剩下k个簇,选取的策略是最小化Ncut时的合并组合

Ncut.png

Louvain

Louvain算法的基本原理也是采用合并的策略,但是它合并的标准是模块度增益。首先将每个节点初始化为不同社区,计算将节点加入其邻居社区的模块度增益△Q,选择使模块度增益最大的邻居进行合并,合并后的社区看做一个新的节点,直到两两社区合并的模块度增益都不大于0,则停止合并。

deltaQ.png

Louvain算法步骤如下:

(1)初始化每个数据点为一个社区;

(2)对每个数据点,尝试加入其邻居所在的社区,计算比较加入前后的模块度增益ΔQ,选出增益最大的那个邻居社区,若其对应的增益ΔQ>0,则该数据点加入这个社区,否则不改变其原来社区划分;

(3)将得到的社区视为一个节点,社区内节点之间边权重转化为新节点环的权重,社区间的边权重转化为新节点间的边权重;

(4)重复(2)(3)步骤,直至满足收敛条件。

收敛条件可以是迭代了一定的次数,亦或是模块度不再增加。

NMF

nmf_pic.png

NMF的基本原理是将原始矩阵分解得到社区指示矩阵和基矩阵,随机初始化这两个矩阵的元素,迭代更新这两个矩阵,更新规则如下:

最小化目标函数:

∣∣A−UVT∣∣F2||A-U

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值