转载请注明出处: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. 通过电机编码器AB相输出确定电机转向

    AB相输出相差90度,即当A相"正跳变"时如果B相是高电平那么是"正转",反之是"反转" 图片: 正转 反转 #include <Ti ...

  2. java中File的delete和deleteOnExit区别(转)

    Java的File类中有两个delete方法:delete和deleteOnExit delete无需解释,为直接删除,deleteOnExit文档解释为:在虚拟机终止时,请求删除此抽象路径名表示的文 ...

  3. UVa 12230 && HDU 3232 Crossing Rivers (数学期望水题)

    题意:你要从A到B去上班,然而这中间有n条河,距离为d.给定这n条河离A的距离p,长度L,和船的移动速度v,求从A到B的时间的数学期望. 并且假设出门前每条船的位置是随机的,如果不是在端点,方向也是不 ...

  4. MFC框架仿真<一>

    #include "my.h" CMyWinApp theApp;/*起点->全局对象*/ void main() { CWinApp* pApp = AfxGetApp() ...

  5. linux导出Excel The maximum column width for an individual cell is 255 characters

    linux环境到处Excel报错: The maximum column width for an individual cell is 255 characters 解决方案: for (int i ...

  6. PAT甲 1048. Find Coins (25) 2016-09-09 23:15 29人阅读 评论(0) 收藏

    1048. Find Coins (25) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Eva loves t ...

  7. android免root hook框架legend

    一.前言 Android中hook框架已经非常多了,最优秀的当属Xposed和Substrate了,这两个框架我在之前的文章都详细介绍过了,不了解的同学,可以转战这里:http://www.wjdia ...

  8. poj3321-Apple Tree(DFS序+树状数组)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36442   Accepted: 10894 Desc ...

  9. 【最大流之Dinic算法】POJ1273 【 & 当前弧优化 & 】

    总评一句:Dinic算法的基本思想比较好理解,就是它的当前弧优化的思想,网上的资料也不多,所以对于当前弧的优化,我还是费了很大的功夫的,现在也一知半解,索性就写一篇博客,来发现自己哪里的算法思想还没理 ...

  10. 【PAT Advanced Level】1015. Reversible Primes (20)

    转换进制&&逆序可以在一起进行,有一点技巧,不要用十进制数来表示低进制,容易溢出. #include <iostream> #include <vector> ...