【社团发现】简介

社团发现,又名社区发现、社团检测等,英文名community detection. 是一种传统的聚类算法。
从Girvan和Newman 于2002年提出的分裂算法,社团发现应该有20年的历史了。相对于bert等神经网络算法,社团发现已经研究20几年了,但是相对于70多年的某数值模拟学科,它又是比价新的领域。

社团在历史上有很多方面的优化:

  1. 社团度量 + 最优解
  2. 切、聚
  3. 样本表征(降维、embedding)
  4. 减少计算复杂度(因为样本很大)
  5. 重叠社团

目前的主要方式是三步:数据 -> 邻接矩阵 -> 聚类。相应的有许多方法,下面简单介绍几个的。

1. 表征

1.1 SBM

https://zhuanlan.z**u.com/p/485607150
https://arxiv.org/pdf/2101.01669.pdf

SBM是一个传统的图生成模型,认为每个节点从属于不同的社区,每个社区之间的节点会以不同的概率相连接,由此生成一张图,这就是它基本的思想。他可以用于社区检测,图聚类,主题建模等任务。


SBM.png

1.2 LDA

LDA(线性判别分析)本质是有监督的正交变换,通过对数据集的旋转+投影(降维)让不同的类别聚在一起。

1.3 非负矩阵分解

NMF(Non-Negative Matrix Factorization)也是降维表征。

factor.png

3.2 Spectral Clustering

4. 标签传播

4.1 Label Propagation Algorithm(LPA)

可以做无监督、也可以做半监督。


lpa.png

4.2 SLPA

https://blog.***.net/itplus/article/details/9286905
与LPA相比,记录每一个节点在刷新迭代过程中的历史标签序列(例如迭代 T 次,则每个节点将保存一个长度为 T 的序列),当迭代停止后,对每一个节点历史标签序列中各(互异)标签出现的频率做统计,按照某一给定的阀值过滤掉那些出现频率小的标签,剩下的即为该节点的标签(通常有多个)。

5. 模块度启发

5.1 Louvain

Louvain.png

5.2 Leiden

由Louvain改进过来的,多了refine过程,保证社团内部是连通的。本质上由于模块度寻优算法是个np问题,需要通过搜索来确定最优解,目前通过贪婪方式获取每一步更优,直到最优,有可能不是最优解。所以搜索方式是优化的一个点。Leiden在这个方面更优。

Leiden.png

6. 隶属度吸引度启发

6.1 近邻传播(AP)聚类算法

ap.png

7. infomap

对图里的节点随机采样出一个序列,按顺序依次尝试将每个节点赋给邻居节点所在的社区,取平均比特下降最大时的社区赋给该节点,如果没有下降,该节点的社区不变。(启发式)

8. 谱聚类(spectral clustering)

https://www.c***blogs.com/sparkwen/p/3155850.html
谱聚类能够识别任意形状的样本空间且收敛于全局最优解,其基本思想是利用样本数据的相似矩阵(拉普拉斯矩阵)进行特征分解后得到的特征向量进行聚类。为切算法。

问题

  1. 算法很多,但是可能我用的不好,实际用的效果都不咋好,特别是一些特定领域。
  2. 算法没有继承性,有些算法提出后就放到那儿了,没有继续优化出非常优的算法(也可能都是没发现)。这么看模块度启发那块儿算是比较好的了,一直在发展。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容