转载请注明出处: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.06 BZOJ1208: HNOI2004宠物收养所(非旋treap)

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...

  2. hdu-1069(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意:一群猴子,给出n块砖的长x宽y高z,用这些砖拼起的高度最高是多少, 要求底下的砖的长宽都要 ...

  3. ABP框架 - 缓存( 转)

    出处:http://www.cnblogs.com/kid1412/p/5987083.html 文档目录 本节内容: 简介 ICacheManager ICache ITypedCache 配置 实 ...

  4. hadoop学习笔记(一):概念和组成

    一.什么是hadoop Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架.它支持在商品硬件构建的大型集群上运行的应用程序.Hadoop是根据G ...

  5. 学习前端的菜鸡对JS的call,apply,bind的通俗易懂理解

       call,apply,bind 在JavaScript中,call.apply和bind是Function对象自带的三个方法,都是为了改变函数体内部 this 的指向.            a ...

  6. php读取用友u8采购入库单列表及详细

    <?php class erpData { protected static $erp; public function __construct() { $dbhost ="192.1 ...

  7. HDU 1166敌兵布阵 2016-09-14 18:58 89人阅读 评论(0) 收藏

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. hdu 4981

    中位数是否大于平均数 水题 #include <cstdio> #include <cstdlib> #include <cmath> #include <c ...

  9. java中的static(包括类前面修饰的static、方法前面修饰的static、成员变量前面修饰的static)

    static是静态修饰符: 什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个 ...

  10. 曲演杂坛--使用TRY CATCH应该注意的一个小细节

    群里一个朋友遇到一个TRY CATCH的小问题,测试后发现是自己从来没有考虑的情况,写篇blog加深下印象 --============================================ ...