转载请注明出处:http://www.cnblogs.com/bethansy/p/6953625.html

LPA算法的思路:

首先每个节点有一个自己特有的标签,节点会选择自己邻居中出现次数最多的标签,如果每个标签出现次数一样多,那么就随机选择一个标签替换自己原始的标签,如此往复,直到每个节点标签不再发生变化,那么持有相同标签的节点就归为一个社区。

算法优点:思路简单,时间复杂度低,适合大型复杂网络。

算法缺点:众所周知,划分结果不稳定,随机性强是这个算法致命的缺点。

体现在:(1)更新顺序。节点标签更新顺序随机,但是很明显,越重要的节点越早更新会加速收敛过程

(2)随机选择。如果一个节点的出现次数最大的邻居标签不止一个时,随机选择一个标签作为自己标签。很明显,在标签重复次数相同的情况下,与本节点相似度更高或对本节点影响力越大的邻居节点的标签有更大的概率被节点选中

但是这些缺点并没有妨碍LPA经常作为论文的benchmark对比算法,而且这个思路可以用在机器学习领域

此处应该有一个小案例支撑,先看一个别人有的

这也是篇好文章,偏机器学习 http://blog.csdn.net/u013378306/article/details/52550805

代码实现:

 

第一步:先给每个节点分配对应标签,即节点1对应标签1,节点i对应标签i;(有的话直接用,没有就生成)
第二步:遍历N个节点(for i=1:N),找到对应节点邻居,获取此节点邻居标签,找到出现次数最大标签,若出现次数最多标签不止一个,则随机选择一个标签替换成此节点标签;
第三步:若节点标签不再变化,则迭代停止,否则重复第二步

最下面是做了一个收敛条件,由于存在二部网络震荡收敛(具体参见上文别人博客介绍),所以本次标签和上一次标签有可能永远不收敛,于是需要再引入一个上上次标签;

Labelnew是每次更新后的每个节点对应标签,Label1存储Labelnew上一次标签记录,Label2存储上上次的标签记录。当其中有一对相同的时候,收敛停止

function [ Labelnew ] = LPA( adjacent_matrix,label )
if nargin<2
label = 1:size(adjacent_matrix,2);
end
N = size(adjacent_matrix,2); Label1 = label;
Label2 = Label1;
Labelnew = Label1;
flag=1;
while(1)
for i=1:N
nb_lables = Labelnew(adjacent_matrix(i,:)==1);%找到邻居下标对应的标签
if size(nb_lables,2)>0
x = tabulate(nb_lables);
max_nb_labels = x(x(:,2)==max(x(:,2)),1);
Labelnew(i) = max_nb_labels(randi(length(max_nb_labels)));
end
end
% 收敛条件,预防跳跃
if all(Labelnew==Label1)||all(Labelnew==Label2)
break;
else
if flag==1
Label1 = Labelnew;
flag=0;
else
Label2 = Labelnew;
flag=1;
end
end
end end

  

Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现的更多相关文章

  1. 标签传播算法(Label Propagation Algorithm, LPA)初探

    0. 社区划分简介 0x1:非重叠社区划分方法 在一个网络里面,每一个样本只能是属于一个社区的,那么这样的问题就称为非重叠社区划分. 在非重叠社区划分算法里面,有很多的方法: 1. 基于模块度优化的社 ...

  2. SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法

    其中部分转载的社区发现SLPA算法文章 一.概念 社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定n ...

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

    package lpa; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class L ...

  4. LabelRank非重叠社区发现算法介绍及代码实现(A Stabilized Label Propagation Algorithm for Community Detection in Networks)

    最近在研究基于标签传播的社区分类,LabelRank算法基于标签传播和马尔科夫随机游走思路上改装的算法,引用率较高,打算将代码实现,便于加深理解. 这个算法和Label Propagation 算法不 ...

  5. 标签传播算法(Label Propagation)及Python实现

    众所周知,机器学习可以大体分为三大类:监督学习.非监督学习和半监督学习.监督学习可以认为是我们有非常多的labeled标注数据来train一个模型,期待这个模型能学习到数据的分布,以期对未来没有见到的 ...

  6. A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问

    这是我最近看到的一篇论文,思路还是很清晰的,就是改进的LPA算法.改进的地方在两个方面: (1)结合K-shell算法计算量了节点重重要度NI(node importance),标签更新顺序则按照NI ...

  7. 标签传播算法(llgc 或 lgc)

    动手实践标签传播算法 复现论文:Learning with Local and Global Consistency1 lgc 算法可以参考:DecodePaper/notebook/lgc 初始化算 ...

  8. 深度学习之反向传播算法(BP)代码实现

    反向传播算法实战 本文仅仅是反向传播算法的实现,不涉及公式推导,如果对反向传播算法公式推导不熟悉,强烈建议查看另一篇文章神经网络之反向传播算法(BP)公式推导(超详细) 我们将实现一个 4 层的全连接 ...

  9. 机器学习-反向传播算法(BP)代码实现(matlab)

    %% Machine Learning Online Class - Exercise 4 Neural Network Learning % Instructions % ------------ ...

随机推荐

  1. 2018.07.22 洛谷P2986 伟大的奶牛聚集(树形dp)

    传送门 给出一棵树,树有边权和点权,若选定一个点作为中心,这棵树的代价是所有点权乘上到根的距离的和.求代价最小. 解法:一道明显的换根dp" role="presentation& ...

  2. 功率谱密度(PDS)的MATLAB分析

    功率谱密度(PSD),它定义了信号或者时间序列的功率如何随频率分布.这里功率可能是实际物理上的功率, 或者更经常便于表示抽象的信号被定义为信号数值的平方,也就是当信号的负载为1欧姆(ohm)时的实际功 ...

  3. 201709012工作日记--Android消息机制

    1. android的消息机制——Handler机制 参考:http://www.jianshu.com/p/9e4d1fab0f36. Android异步消息处理机制完全解析,带你从源码的角度理解: ...

  4. MSDN Webcast 跟我一起从零开始学WCF系列课程

    系列课程 >跟我一起从零开始学WCF系列课程   跟我一起从零开始学WCF系列课程(1):WCF概述 (Level 200)   讲 师:徐长龙    课程简介:从 本堂课开始我们将开启一个新的 ...

  5. (线段树)Balanced Lineup --POJ --3264

    链接: 对于POJ老是爆,我也是醉了, 链接等等再发吧! http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82832#problem/G 只 ...

  6. Hbase和Hive的异同

    共同点:1.hbase与hive都是架构在hadoop之上的.都是用hadoop作为底层存储 区别:2.Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBa ...

  7. java web渲染器

    渲染就是server端将夹杂有脚本语言变量对象的模版文件解释为纯html页面的过程!

  8. Back to December -- Taylor Swift

                               Back to December   泰勒·斯威夫特(Taylor Swift),美国乡村音乐女创作歌手,会用木吉他.钢琴演奏. 曾获得美国乡村音 ...

  9. 删除map、list集合元素总结

    @Testpublic void removeElementFromMap(){Map<Integer, String> test = new HashMap<Integer, St ...

  10. CentOS系统安装遇到的一些问题

    Vi操作:按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制保存,不推出vi:wq 保存文件并退出vi:wq! 强制保存文件 ...