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

LPA算法的思路:

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

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

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

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

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

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

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

重点来了,main函数中需要加载一个我们常用的足球俱乐部的经典数据,很遗憾这里不能附件,后期我会写一个关于数据收集大全的博客

%clc;
clear;
close all;
load(‘FootBallClub.mat‘);
newlabels = LPA(FootBallClub);
community = {};

class_labels = unique(newlabels);
class_size = size(class_labels,2);
for i=1:class_size
    community{i} = find(newlabels==class_labels(i));

end
fprintf(‘共有%d个社区\n‘,class_size)

for i=1:class_size
    if(isempty(community{i}) == 0)
         fprintf(‘第%d个社区含有点:‘,i)
         fprintf(‘%d ‘,community{i})
         fprintf(‘\n‘)
    end
end

  

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

  

时间: 2024-10-08 19:35:22

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

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

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

这是我最近看到的一篇论文,思路还是很清晰的,就是改进的LPA算法.改进的地方在两个方面: (1)结合K-shell算法计算量了节点重重要度NI(node importance),标签更新顺序则按照NI由大到小的顺序更新 得到ks值后,载计算一下节点邻居ks值和度值d的比值 (2)当出现次数最多的标签不止一个时,再计算一下标签重要度LI(label importance) 其实就是找到节点相同标签的那些令居计算一个合值,看着也不难啊 (3)最后这个算法使用的是异步传播 下面是我实现的代码 func

标签传播算法

参考文献:http://blog.csdn.net/cleverlzc/article/details/39494957Gephi 是一款网络分析领域的可视化处理软件,可以用于数据分析,链接分析,社交网络分析等.标签传播算法LPA(Label Propagation Algorithm)最早是针对社区发现问题提出时的一种解决方案.主要优点有:时间复杂度(近似线性),不需要事先知道社区数量.主要算法流程:首先为每个节点设置唯一标签,接着迭代依次更新各个节点,针对每个节点,通过统计节点邻居的标签,选

LabelRank(A Stabilized Label Propagation Algorithm for Community Detection in Networks)非重叠社区发现

最近在研究基于标签传播的社区分类,LabelRank算法基于标签传播和马尔科夫随机游走思路上改装的算法,引用率较高,打算将代码实现,便于加深理解. 一.概念 相关概念不再累述,详情见前两篇文章 二.算法思路 (1)Propagation (2)Inflation (3)Cut off (4)Explicit Conditional Update (5)Stop Criterion 三.A Stabilized Label Propagation Algorithm for Community D

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

Poisson image editing算法实现的Matlab代码解析

之前我发了数篇系列博文来仔细研究Poisson Image Editing算法,每次重新审视和深入,仿佛都能有更为深刻的认识和很大的收获.这应该算是我这个系列的完结篇,会用用Matlab代码一点一点的演示,原文作者到底是如何设计和实现他那个强大且影响深远的算法的.希望你在看本文之前务必参考一下文章来了解算法原理,本文将主要讲解编程实现的问题,对于前面讲过的内容,我不会深究.但我个人总体的感觉是,现在图像处理算法对数学的要求是越来越高了,像泊松融合.泊松抠图这样的算法如果没有偏微分方程(本算法中涉

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

%% Machine Learning Online Class - Exercise 4 Neural Network Learning % Instructions % ------------ % % This file contains code that helps you get started on the % linear exercise. You will need to complete the following functions % in this exericse: