标签传播算法

参考文献:http://blog.csdn.net/cleverlzc/article/details/39494957
Gephi 是一款网络分析领域的可视化处理软件,可以用于数据分析,链接分析,社交网络分析等。
标签传播算法LPA(Label Propagation Algorithm)最早是针对社区发现问题提出时的一种解决方案。
主要优点有:时间复杂度(近似线性),不需要事先知道社区数量。
主要算法流程:首先为每个节点设置唯一标签,接着迭代依次更新各个节点,针对每个节点,通过统计节点邻居的标签,选择标签数最多的标签更新该节点,如果最多便签数大于一,则从中随机选择一个标签更新该节点,直到收敛为止。
标签传播算法的节点标签更新策略主要分成两种,一种是同步更新,另一种是已不更新。
其中同步更新:在执行第t次迭代更新时,仅依赖第t-1次更新后的标签集。
异步更新:在执行第t次迭代更新时,同时依赖t次迭代已经更新的标签集以及在t-1更新但t次迭代 中未来的及更新的标签集,异步更新策略更关心节点更新顺序,所以在异步更新过程中,节点的 更新顺序采用随机选取的方式。
LPA算法适用于不重叠社区发现,针对重叠社区的发现问题,学者提出了COPRA(Community Overlapping Propagation Algorithm)算法。该算法提出所有节点可以同时属于V个社区,V是个人为设定的全局变量,很显然v的选择直接影响算法的效果,针对v的选择需要足够的先验知识,在真实的社区网络中,v的选择不能很好的被控制。

SLPA(Speaker-listener based information propagation algorithm)算法引入了Listener和Speaker两个形象化概念,在标签更新过程中,待更新的节点我们称为Listener,该节点的领域节点我们称为Speaker,因为Listener最终的标签属性是根据这些Speaker所决定的。
在LPA中,把局域节点中最多标签数的标签赋予该节点,但这是一种更新规则,在SLPA中有多重更新策略规则。
基本算法流程和LPA相同,不同点:在SLPA中为每个节点设置了一个历史标签队列,该队列记录了t次迭代以来,该节点被赋予的标签。直到迭代结束后,对每个节点的历史标签队列进行统计,标签频率超过一个给的的阈值ρ的所有标签就是该节点所属的多个社区。
SLPA算法中涉及一个重要参数ρ,如果ρ的取值为1,则SLPA算法退化成非重叠社区。

HANP(Hop Attenuation & Node Preference)算法,其基本思想为:
①为每个标签引入score值来对该标签的传播能力进行评价,score值随着传播距离的增加而减弱。
score衰减规则:
其中δ 表示衰减因子(hop attenuation),δ 等于0的时候停止传播
②每个节点通过领域节点更新标签时的规则δ 根据丰富(会综合考虑标签的传播能力score值、标签出现频率、标签的度等)
标签更新规则:

BMLPA算法主要思想:
提出平衡归属系数概念,即对于每个节点其归属的社区数不限,但对同一节点的标签局域平衡归属系数。

标签更新:待更新标签的领域标签均由一个二元组序列与之对应,二元组的第一项表示标签类别,第二项表示节点属于该类别的隶属度,对于每个节点,所有隶属的之和为1。
①按照类别统计所有领域中的节点标签和隶属度,得到领域中的所有标签,和标签对应的隶属的之和。
②归一化A:将统计后的标签-隶属度序列中对大隶属度值除以所有标签的隶属度,得出一组隶属度最大值为1的标签-隶属度序列。
③筛选:将标签-隶属度序列中小于阈值ρ的标签剔除出去。
④标签更新:归一化B,为了保证最后得到标签-隶属度序列中所有隶属度和为一,将所以标签的隶属度除以所有标签隶属度之和。最后把得到标签-隶属度二元组赋值给待更新的标签。

Fast Unfolding算法
该算法是一种基于modularity optimization的启发式方法。
算法步骤,主要分成两个步骤:
①首先把每个节点赋予一个唯一的社区,然后对所有的节点依次实行聚合,将待聚合的节点找到其所有的领域,依次把该节点聚合到领域节点中,计算modularity值,将节点最终聚合到modularity值最大的那个邻居节点中,反复迭代,直到所有节点都不能改善modularity值为止。
②将第一阶段生成的社区网络中的所有社区看成“节点”,因为新“节点”中包含多个节点,所有两个“节点”间需要有权重,权重采用两个社区间个边的权重总和。

DCLP(Distance-Control Label Propagation)算法,由HANP算法简化而来,只考虑标签传播过程中的衰减因素,并使用距离dis_allowed代替δ,通过该参数可以有效控制标签的传播范围。
AM-DCLP算法对原图进行DCLP算法运算,但得到的某些社区规模较大时,则将它们对应的子图再继续执行DCLP算法。
两个控制参数:
maxC_allowed:社区规模的最大值
break_down_allowed:允许调用DCLP算法的基数
SDCLP算法:每次DCLP算法迭代后,对所有的社区进行检测,若社区的规模足够大,则终止迭代,否则继续迭代。
优点:及时的终止可以有效的反正大社区的出现,同时过小的社区通过迭代可以得到从发的发展。

时间: 2024-08-06 13:10:10

标签传播算法的相关文章

UCI标签传播算法

半监督学习 顾名思义是介于分类(监督学习)与聚类(无监督学习)之间的一种学习范式.给定很少一部分样本的类标签,怎么样利用少部分具有类标签的数据来提高聚类的准确率是其研究主题.其中基于图的标签传播(Label Propagation)算法是有影响的算法之一. UCI机器学习数据库:http://archive.ics.uci.edu/ml/ 原理:某个测试用例的对象的标签(类别)和它附近的对象的标签相同,我们可以根据距离或者相似性来为两个对象设定一个权重.如果a和b的距离越小或者相似性越大的,则a

标签传播算法(llgc 或 lgc)

动手实践标签传播算法 初始化算法 载入一些必备的库: from IPython.display import set_matplotlib_formats %matplotlib inline #set_matplotlib_formats('svg', 'pdf') import numpy as np import matplotlib.pyplot as plt from scipy.spatial.distance import cdist from sklearn.datasets i

Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现

LPA算法的思路: 首先每个节点有一个自己特有的标签,节点会选择自己邻居中出现次数最多的标签,如果每个标签出现次数一样多,那么就随机选择一个标签替换自己原始的标签,如此往复,直到每个节点标签不再发生变化,那么持有相同标签的节点就归为一个社区. 算法优点:思路简单,时间复杂度低,适合大型复杂网络. 算法缺点:众所周知,划分结果不稳定,随机性强是这个算法致命的缺点. 体现在:(1)更新顺序.节点标签更新顺序随机,但是很明显,越重要的节点越早更新会加速收敛过程 (2)随机选择.如果一个节点的出现次数最

lpa标签传播算法讲解及代码实现

package lpa; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class LPA { public static float sigma = 1; public static int tag_num = 2; public static void main(String[] args) { float[][] data = { {1,1}, {1,2}, {2,1}, {2

lpa标签传播算法解说及代码实现

package lpa; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class LPA { public static float sigma = 1; public static int tag_num = 2; public static void main(String[] args) { float[][] data = { {1,1}, {1,2}, {2,1}, {2

神经网络训练中的Tricks之高效BP(反向传播算法)

神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) [email protected] http://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词.对于我们这些所谓的尝试应用机器学习技术解决某些问题的人,更是如此.曾记得,我们绞尽脑汁,搓手顿足,大喊“为什么我跑的模型不work?”,“为什么我实现的效果那么差?”,“为什么我复现的结果没有他论文里面说的那么好?”.有人会和你说“你不懂调参!

神经网络的正反向传播算法推导

1 正向传播 1.1 浅层神经网络 为简单起见,先给出如下所示的简单神经网络: 该网络只有一个隐藏层,隐藏层里有四个单元,并且只输入一个样本,该样本表示成一个三维向量,分别为为\(x_1\),\(x_2\)和\(x_3\).网络的输出为一个标量,用\(\hat{y}\)表示.考虑该神经网络解决的问题是一个二分类的问题,把网络的输出解释为正样本的概率.比方说输入的是一张图片(当然图片不可能只用三维向量就可以表示,这里只是举个例子),该神经网络去判断图片里面是否有猫,则\(\hat{y}\)代表该图

[2] TensorFlow 向前传播算法(forward-propagation)与反向传播算法(back-propagation)

TensorFlow Playground http://playground.tensorflow.org 帮助更好的理解,游乐场Playground可以实现可视化训练过程的工具 TensorFlow Playground的左侧提供了不同的数据集来测试神经网络.默认的数据为左上角被框出来的那个.被选中的数据也会显示在最右边的 “OUTPUT”栏下.在这个数据中,可以看到一个二维平面上有红色或者蓝色的点,每一个小点代表了一个样例,而点的颜色代表了样例的标签.因为点的颜色只有两种,所以这是 一个二

反向传播算法简介

<!doctype html> 反向传播算法html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospac