算法/论文笔记 Fluid Communities: A Competitive, Scalable and Diverse Community Detection Algorithm (2017)
Posted UQI-LIUWJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法/论文笔记 Fluid Communities: A Competitive, Scalable and Diverse Community Detection Algorithm (2017)相关的知识,希望对你有一定的参考价值。
- 用于进行graph点的聚类(community detection)
- 一个community内的点紧密地互相连接,community之间的点连接得很稀疏
1 主要算法
1.1 初始化
- 给定一张图G=(V,E),其中V是顶点集,E表示边集
- 初始化的时候,初始化k个community
- k是一个超参数,
- 每个community 随机包含了一些点 (每一个community至少包含一个点)
- 每个community 有一个对应的密度(density),在(0,1]之间
1.2 逐点更新
- 算法是逐点进行该点属于的community 的更新的。所有点更新一轮称为一个superstep
- 每一轮superstep,算法以随机的排序进行每个点community的更新迭代
- 当每个点的community连续两轮superstep皆不更新的时候,算法收敛,停止
- 其中,每个点的更新法则如下
-
- v——需要更新community的点
- ——点v更新后可能的community的集合(候选集)
- ——点v的邻居
- d(c)——community c的密度(density)
- c(w)——点v的邻居/点v自己属于哪个类
- 相当于是根据点v邻居属于哪个点,来判断点v选择哪个community之后,sum值最大
- 当得到候选集后,点v更新后的community如下:
-
- 如果点v原先的community也在 候选集 中,那么点v不改变community
- 否则从几个 候选集 中随机选择一个( 候选集 中的几个community,他们的sum值是一样的)
- ——>这个算法可以保证没有一个community最终会没有点(也就是至少一个点)
2 性质
2.1 异步算法
FluidC算法是异步算法,一步一个一个点更新。
如果是同步算法的话,每个community的density无法保证值就是公式(1)求得的值
——>有可能出现某个community 最终没有点
2.2 不会有特别大的community(除非真的点之间连边居多)
一个community中点越多,density越小。这会达到一个均衡
- 比如上图,标蓝的点是这一轮需要更新的点
- 红色框框内的数值表示,如果这个点被划到红色community,那么这个点在公式(2)下的sum有多少;绿色的同理
- 可以看到,左边的情况下,最终蓝色点会被划到绿色的community内;而右边的情况里,蓝色点会被分给红色的community
2.3 线性时间复杂度
每一轮superstep,每一条边会被考虑两次(分别是它的两个节点被更新时的情况)
所以时间复杂度是O(E)
3 举例
4 networkx实现
4.1 构建图
import numpy as np
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edges_from([(1, 5), (1, 2),(1,6),(2,3),(2,6),(3,4),(3,7),(4,7),(5,6),(6,7)])
plt.figure(figsize=(7,5))
nx.draw(G, with_labels=True)
plt.show()
4.2 FluidC算法
par=nx.algorithms.community.asyn_fluidc(G,2)
par_lst=list(par)
par_lst
#[1, 2, 5, 6, 3, 4, 7]
4.3 按照community画图
color_lst=[0]*7
for i in par_lst[0]:
color_lst[i-1]='green'
for i in par_lst[1]:
color_lst[i-1]='red'
nx.draw(G, nodelist=[1,2,3,4,5,6,7],node_color=color_lst,with_labels=True)
plt.show()
和第三节推导出来的是一样的
以上是关于算法/论文笔记 Fluid Communities: A Competitive, Scalable and Diverse Community Detection Algorithm (2017)的主要内容,如果未能解决你的问题,请参考以下文章