社区发现(四)--LPA(标签传播算法)

本文介绍基于标签传播的社区发现算法,包括非重叠社区发现的LPA算法和重叠社区发现的COPRA算法。LPA算法通过迭代更新节点标签至稳定状态,实现社区划分。COPRA算法在此基础上,引入从属系数,实现重叠社区的识别。

转自:https://blog.youkuaiyun.com/aspirinvagrant/article/details/46127965

标签传播算法基本思想是通过标记节点的标签信息预测未标记节点的标签情况。节点之间的标签传播主要依照标签相似度进行,在传播过程中,未标记的节点根据邻接点的标签情况来迭代更新自身的标签信息,如果其邻接点与其相似度越相近,则表示对其所标注的影响权值就越大,邻接点的标签就更容易进行传播。


基于标签传播的非重叠社区发现算法LPA

LPA主要思想是起初每个节点拥有独立的标签,那么网络中有n不同标签,每次迭代中对于每个节点将其标签更改为其邻接点中出现次数最多的标签,如果这样的标签有多个,则随机选择一个。通过迭代,直到每个节点的标签与其邻接点中出现次数最多的标签相同,则达到稳定状态,算法结束。此时具有相同标签的节点即属于同一个社区。

LPA算法执行步骤:

利用igraph,给出LPA的R代码

> library('igraph')
> karate  <-  graph.famous("Zachary")
> community <- label.propagation.community(karate)
> modularity(community)
[1] 0.3717949
> membership(community)
 [1] 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2
> plot(community,karate)


基于标签传播的重叠社区发现算法COPRA

LPA算法虽然有很多优势,但无法发现重叠社区结构。对此,基于LPA算法,引入了新的标签结构(c,b),其中,c表示社区标识符,b表示节点x在社区c中的从属系数,且0≤b≤1。顶点x的所有从属系数之和等于1,通过bt(c,b)表示迭代次数t时的顶点x对于社区c的从属系数,N(x)表示顶点x的邻接顶点集。

该算法在执行之初会为网络中每一个节点设置一个唯一的社区编号,一般这个社区编号就是节点的自身的ID;之后,节点会根据自己的邻居节点的社区分布决定自己的社区,简单的来说就是自己的邻居节点倾向于选择哪个社区,自己就选择哪个社区。算法在执行时会使用隶属度(Belonging Coefficient)来帮助节点决定选择哪一个社区。如果节点对于邻居节点所在社区的隶属度都低于阈值,那么节点就随机选择一个社区;最后,算法会根据一些条件来决定是否停止算法。停止条件一般分为两种:第一种是连续两次迭代社区标签数量相同;第二种是连续两次迭代社区内节点数目不变。伪代码如下:
输入:图graph(V,E),K
输出:节点的社区信息partition
1: 为每一个节点设置唯一的社区标签
2: 在没有达到终止条件前,对每一个节点重复执行:
3:     更新节点对其邻居节点所在社区的隶属度bc
4:     如果 bc < 1/K :
5:         排除社区标签
6:     如果所有社区标签 bc < 1/K :
7:         随机选取一个社区标签
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值