Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
转载请注明出处: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代码实现的更多相关文章
- 标签传播算法(Label Propagation Algorithm, LPA)初探
0. 社区划分简介 0x1:非重叠社区划分方法 在一个网络里面,每一个样本只能是属于一个社区的,那么这样的问题就称为非重叠社区划分. 在非重叠社区划分算法里面,有很多的方法: 1. 基于模块度优化的社 ...
- SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法
其中部分转载的社区发现SLPA算法文章 一.概念 社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定n ...
- lpa标签传播算法解说及代码实现
package lpa; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class L ...
- LabelRank非重叠社区发现算法介绍及代码实现(A Stabilized Label Propagation Algorithm for Community Detection in Networks)
最近在研究基于标签传播的社区分类,LabelRank算法基于标签传播和马尔科夫随机游走思路上改装的算法,引用率较高,打算将代码实现,便于加深理解. 这个算法和Label Propagation 算法不 ...
- 标签传播算法(Label Propagation)及Python实现
众所周知,机器学习可以大体分为三大类:监督学习.非监督学习和半监督学习.监督学习可以认为是我们有非常多的labeled标注数据来train一个模型,期待这个模型能学习到数据的分布,以期对未来没有见到的 ...
- A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
这是我最近看到的一篇论文,思路还是很清晰的,就是改进的LPA算法.改进的地方在两个方面: (1)结合K-shell算法计算量了节点重重要度NI(node importance),标签更新顺序则按照NI ...
- 标签传播算法(llgc 或 lgc)
动手实践标签传播算法 复现论文:Learning with Local and Global Consistency1 lgc 算法可以参考:DecodePaper/notebook/lgc 初始化算 ...
- 深度学习之反向传播算法(BP)代码实现
反向传播算法实战 本文仅仅是反向传播算法的实现,不涉及公式推导,如果对反向传播算法公式推导不熟悉,强烈建议查看另一篇文章神经网络之反向传播算法(BP)公式推导(超详细) 我们将实现一个 4 层的全连接 ...
- 机器学习-反向传播算法(BP)代码实现(matlab)
%% Machine Learning Online Class - Exercise 4 Neural Network Learning % Instructions % ------------ ...
随机推荐
- 高性能 js -- 无阻塞加载脚本
参考: <<高性能JavaScript>> Nicbolas C. Zakas 著 javascript代码的下载和执行过程会阻塞浏览器的其他进程, 比如页面的绘制, 遇到&l ...
- 2018.10.14 NOIP训练 圣诞树(简单dp)
传送门 sbDP题. 曾经一直TLE不知道为什么. 这次发现输入有坑233. 代码
- 2018.06.29 洛谷P2890 [USACO07OPEN]便宜的回文(简单dp)
P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome 时空限制 1000ms / 128MB 题目描述 Keeping track of all the cows c ...
- 2018.09.11 poj2976Dropping tests(01分数规划)
传送门 01分数规划板子题啊. 就是简单变形移项就行了. 显然 ∑i=1na[i]∑i=1nb[i]≤k" role="presentation" style=" ...
- 2018.08.16 洛谷P3607 [USACO17JAN]序列反转(线性dp)
传送门 一道感觉比较简单的dp. 注意是要求翻转一个子序列而不是一段连续的数(被坑了很多次啊)... 看到数据范围果断开一个四维数组来dp一波. 我们显然可以用f[i][j][k][t]表示下标在[l ...
- 2018.07.10NOIP模拟 Draw(容斥原理)
Draw 题目背景 SOURCE:NOIP2016-RZZ-4 T3 题目描述 给定笛卡尔坐标系上 n 个不重复的点. 定义一个 L 形为: 一个形如 (x,y),(x+1,y)-(x+a,y),(x ...
- java中File的delete和deleteOnExit区别(转)
Java的File类中有两个delete方法:delete和deleteOnExit delete无需解释,为直接删除,deleteOnExit文档解释为:在虚拟机终止时,请求删除此抽象路径名表示的文 ...
- Linux下安装配置 Jdk1.6+Tomcat6+Apache2.2.x+jk_mod1.2 详解
本篇以Redhat AS5,内核为Linux 2.6.18-8.el5 为例,其中Redhat/Fedora系列基本一致,其他Linux或者版本均可以参考. STEP 1 软件下载:1. jdk1.6 ...
- HDU 2561 第二小整数 (排序)
题意:中文题. 析:输入后,排一下序就好. 代码如下: #include <iostream> #include <cstdio> #include <algorithm ...
- SecureCRT和乱码
示例: # ls /usr/local/r3c/bin/lib /bin/ls: /usr/local/r3c/bin/lib: ????????? 查看系统字符集设置: # locale LANG= ...