SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法
其中部分转载的社区发现SLPA算法文章
一、概念
社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏。
设图G=G(V,E),所谓社区发现是指在图G中确定nc(>=1)个社区C={C1,C2,...,Cnv},使得各社区的顶点集合构成V的一个覆盖。
若任意两个社区的顶点集合的交际均为空,则称C为非重叠社区(disjoint communities);否则称为重叠社区(overlapping communities)。
二、SLPA算法思想与流程
SLPA(Speaker-listener Label Propagation Algorithm)算法是一种社区发现算法,它是对LPA算法(标签传播算法)的拓展。SLAP重叠社区的发现主要认为每个节点不光只有一个标签,每次迭代增加一个标签,最后再通过r进行筛选
算法思想如下:
输入参数:迭代次数T,满足社区次数要求的阈值r
输出参数:每一个节点的社区分布
(1)首先,每一个节点的存储器中初始化一个唯一的标签。
(2)然后,重复进行以下步骤,直到达到最大迭代T:
a. 选择一个节点作为监听器;
b. 所选节点的每个邻居随机选择概率正比于该标签在其存储器中的出现频率的标签,把所选择的标签(speakervote)发送到听众(listener);
c. 监听器增加接收到的最流行的标签到内存。
(3)最后,根据在存储器里的标签和阈值r,后处理被用于输出社区
三、代码实现
实现代码可在GitHub网站上下载,Python下载地址
伪代码:
//Algorithm 1 : SLPA(T, r)
[n,Nodes]=loadnetwork();
//Stage 1: initialization
for i = 1 : n do
Nodes(i).Mem=i;
//Stage 2: evolution
for t = 1 : T do
Nodes.ShuffleOrder();
for i = 1 : n do
Listener=Nodes(i);
Speakers=Nodes(i).getNbs();
for j = 1 : Speakers.len do
LabelList(j)= Speakers(j).speakerRule();
w=Listener.listenerRule(LabelList);
Listener.Mem.add(w);
//Stage 3: post-processing
for i = 1 : n do
remove Nodes(i) labels seen with probability < r;
四、References
Xie J, Szymanski B K, Liu X. SLPA: Uncovering Overlapping Communities in Social Networks via a Speaker-Listener Interaction Dynamic Process[C]// IEEE, International Conference on Data Mining Workshops. IEEE Computer Society, 2011:344-349.
注意事项:
SLAP算法是异步更新,但是原文并没有提到节点排序的具体规则,Python中调用代码numpy.random.permutation(x),对矩阵进行洗牌,并返回洗牌后的矩阵副本;
其次T根据网络结构和规模取值不一,实验证明当T>=20时,节点社区划分结果一般就稳定了。r>=0.04
转载于:https://www.cnblogs.com/bethansy/p/6710899.html
SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法相关推荐
- 社区发现算法——LPA与SLPA算法
LPA(Label Propagation Algorithm) LPA算法是2002年由zhu等提出的,在2007年被Usha.Nandini.Raghavan应用到了社区发现领域,提出了RAK算法 ...
- 标签传播算法_复杂网络社区发现算法汇总
社区发现 这篇文章汇总了一些常见的社区发现概念和算法,包括 Modularity Q Fast Unfolding(Louvain Algorithm) LPA SLPA KL算法 GN算法 社区: ...
- 复杂网络之社区发现算法
GN算法 2002年Girvan等提出了GN(Girvan - Newman ,命名是取自两位提出作者名)算法<Community Structure in Social and Biologi ...
- 社区发现算法1——LPA 算法群
LPA:标签传播算法 label propagation algorithm 秒懂 简要介绍 图解过程 时间复杂度 算法优劣 拓展 HANP算法(Hop Attenuation & Node ...
- 社区发现算法-Community Detection-NormalizeCut/Louvain/NMF/LPA
本文结构安排 图聚类简介 正则化割 Louvain 非负矩阵分解(NMF) 其他常见方法 图(graph):是一种由点和边集构成的结构 G = ( V , E ) G=(V,E) G=(V,E) 图聚 ...
- 社区发现算法 python_社区发现(Community Detection)算法(转)
作者: peghoty 社区发现(Community Detection)算法用来发现网络中的社区结构,也可以看做是一种聚类算法. 以下是我的一个 PPT 报告,分享给大家. 从上述定义可以看出:社区 ...
- 社区发现算法 - Fast Unfolding(Louvian)算法初探
1. 社团划分 0x1:社区是什么 在社交网络中,用户相当于每一个点,用户之间通过互相的关注关系构成了整个网络的结构,在这样的网络中,有的用户之间的连接较为紧密,有的用户之间的连接关系较为稀疏,在这样 ...
- fastunfolding算法_社区发现算法综述—part1
目前我能在arxiv上找到的最新的关于社区发现算法系列的综述文了. 正文从这里开始: 2.2 社区发现 现代网络在规模.多样性和复杂性上呈指数增长. 由于网络的变化,各种各样呈现出网络结构的不同类型的 ...
- 社区发现算法原理与louvain源码解析
前言 社区发现(community detection),或者社区切分,是一类图聚类算法,它主要作用是将图数据划分为不同的社区,社区内的节点都是连接紧密或者相似的,而社区与社区之间的节点连接则是稀疏的 ...
最新文章
- 关于可变字符串StringBuffer和String的区别总结
- 计算机相关货品类别,工业计算机的种类以及产品供应链
- 用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
- spring IOC容器 Bean 管理——基于注解方式
- linux 读取 ntfs硬盘,嵌入式linux下ntfs格式的硬盘读写方法
- 使用 Visual Studio Code 编写 TypeScript
- apk注册机加密_apk软件添加注册机方法 安卓apk添加授权教程
- 如何“复活”一个人,这里有一份最全的技术路线图谱丨钛媒体深度
- java order()_Java Comparator naturalOrder()用法及代码示例
- java山海经之轩辕_山海经之情剑轩辕 炼化任务详细攻略
- iOS TouchID指纹验证
- 苹果悄悄在硅谷买楼 以古希腊诸神命名 据说跟造车有关
- 2022-2028全球与中国犁螺栓市场现状及未来发展趋势
- web前端面试题附答案035-关于number考点大全,走过路过不会错过
- Python开发技术—网络爬虫
- 一个成功软件测试项目的经验(转载)
- 开源前端脚本错误监控及跟踪解决项目BadJS试用
- Python简介及官网文档
- mhw跳过结尾_怪物猎人世界怎么刷珠子快 MHW刷珠子炼金SL大法
- Androidstudio 配置阿里云镜像仓库