•标签传播算法

(LPA)是由 Zhu 等人于 2002 年提出,它是一种基于图的半监督学习方法,其基本思路是用已标记节点的标签信息去预测未标记节点的标签信息。利用样本间的关系建立关系完全图模型,在完全图中,节点包括已标注和未标注数据,其边表示两个节点的相似度,节点的标签按相似度传递给其他节点。标签数据就像是一个源头,可以对无标签数据进行标注,节点的相似度越大,标签越容易传播。由于该算法简单易实现,算法执行时间短,复杂度低且分类效果好,引起了国内外学者的关注,并将其广泛地应用到多媒体信息分类、虚拟社区挖掘等领域中。

标签传播算法基本理论

根据 LPA 算法基本理论,每个节点的标签按相似度传播给相邻节点,在节点传播的每一步,每个节点根据相邻节点的标签来更新自己的标签,与该节点相似度越大,其相邻节点对其标注的影响权值越大,相似节点的标签越趋于一致,其标签就越容易传播。在标签传播过程中,保持已标注数据的标签不变,使其像一个源头把标签传向未标注数据。最终,当迭代过程结束时,相似节点的概率分布也趋于相似,可以划分到同一个类别中,从而完成标签传播过程。

特点:

1只需利用少量的训练标签指导,利用未标注数据的内在结构、分布规律和邻近数据的标记,即可预测和传播未标记数据的标签,然后合并到标记的数据集中。

2LPA 可以通过相近节点之间的标签的传递来学习分类,它不受数据分布形状的局限,可以克服一些算法只能发现“类圆形”结构的缺点。只要同一类的数据在空间分布上是相近的,那么不管数据分布是什么形状,都能通过标签传播将它们分到同一个类里。

该算法操作简单、运算量小,适合大规模数据信息的挖掘和处理。缺点是每次迭代结果不稳定,准确率不高。  该算法操作简单、运算量小,适合大规模数据信息的挖掘和处理。缺点是每次迭代结果不稳定,准确率不高。

实验结果

参考:标签传播算法理论及其应用研究综述_张俊丽

main:

clear
clc
close all%(关闭图像)%%%%%%%%%%%%%%%%%%%%%%%%  生成数据  %%%%%%%%%%%%%%%%%%%%%%%%%
%定义一个自变量x含有30个元素,取值区间从0到2pi
N=1000;
t=(2*pi)*(1+2*rand(1,N));
s=6+2*rand(1,N);
x = cos(t);
y = sin(t);
s1=1+2*rand(1,N);
%l有标签数
%u无标签数
X=[x.*s,x.*s1,;y.*s,y.*s1];
X1=[X(1,1:10);X(2,1:10)];
NN=N+1;
X2=[X(1,NN:NN+10);X(2,NN:NN+10)];
X=[X1,X2,X(:,11:N),X(:,NN+11:N*2)];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% load('22moon.mat');
% X=D(:,1:1:2);
% X=X';
% N=1000;
% X1=[X(1,1:10);X(2,1:10)];
% NN=N+1;
% X2=[X(1,NN:NN+10);X(2,NN:NN+10)];
% X=[X1,X2,X(:,11:N),X(:,NN+11:N*2)];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[D,N] = size(X);
%X数据横着放的
figure
plot(X(1,:),X(2,:),'.')
hold on
plot(X1(1,:),X1(2,:),'ok')
plot(X2(1,:),X2(2,:),'or')
hold off
%标号向量label,列向量
label=zeros(20,1);
label(1:10,1)=1;
label(11:20,1)=2;%%%%%%%%%%%%%%%%%%%%%%%%  LPA算法分类  %%%%%%%%%%%%%%%%%%%%%%
%label数据点所属类
%l有标号的数据点个数
%N=l+u,数据点个数
%C类别个数
%dd迭代次数
C=2;
dd=30;
[ Labelnew ] = LPA( X,label,C,dd);%%%%%%%%%%%%%%%  画出半监督分类后的结果图  %%%%%%%%%%%%%%%%%%%
%画出分类结果
figure
plot(X(1,:),X(2,:),'.')
hold on
for i=1:Nif Labelnew(i)==1
plot(X(1,i),X(2,i),'ok')else
plot(X(1,i),X(2,i),'or')end
end
hold off

LPA:

function [ Labelnew ] = LPA( X,label,C,dd)
%label有标号数据点所属类
%l有标号的数据点个数
%N=l+u,数据点个数
%C类别个数
%dd迭代次数
[D,N] = size(X);
l=size(label);
%Step1:计算距离
X2 = sum(X.^2,1);
distance = repmat(X2,N,1)+repmat(X2',1,N)-2*X'*X;%Step2: 构造相似矩阵W
W = zeros(N,N);
t=2;
for i=1:Nfor j=1:NW(i,j)=exp(-distance(i,j)/(t*t));end
end%Step3: 构造概率传递矩阵T(P)
T=zeros(N,N);
% for i=1:N
%     for j=1:N
%         T(i,j)=W(i,j)/sum(W(i,:));
%     end
% end
zz=1./sum(W,2);
for i=1:N
T(i,:)=W(i,:).*zz(i);
end
%Step4:定义一个(l+u)*C的标注矩阵Y
Y=ones(N,C)*0.5;
%随机生成
% Y=rand(N,C);
%归一化
for i=1:Nfor j=1:CY(i,j)=Y(i,j)/sum(Y(i,:));end
end
%%%%%前l个已有标号写上
for i=1:l %Lj=label(i); Y(i,:)=0;Y(i,j)=1;
end%Step5:更新自己的概率分布。
F=Y;
%更新300次
for i=1:dd
%执行传播
F=T*F;
%重置F中已知的标号
for i=1:l %Lj=label(i); F(i,:)=0;F(i,j)=1;
end
end%Step6:找到每个数据所属于的类
%对列进行排序,sorted是拍好的向量,index是sorted 向量中对 A 的索引,排序是安升序进行的。
%[sorted,index] = sort(distance);
% [B,index]=sort(A,)%从小往大排
[B,index]=sort(F','descend');%从大往小排序
%第二行到第1行的没一列数
Labelnew = index(1,:);
end

LPA标签传播算法——MATLAB实现及代码相关推荐

  1. 浅谈标签传播算法:LPA

    标签传播算法:LPA 1.半监督学习 让学习器不依赖外界交互,自动的利用未标记样本来提升学习性能,这种就是半监督学习,主要用来处理现实中有标记数据少.未标记数据多的问题,要利用未标记的数据,必须要做一 ...

  2. 附源码|复杂网络社区发现——标签传播算法(LPA)

    本文通过Python 3.7实现了标签传播算法的两个代码(1.自己写的,2.调包实现),并通过空手道俱乐部的例子进行可视化显示. 标签传播是一种半监督机器学习算法,它将标签分配给以前未标记的数据点.在 ...

  3. 社区发现之标签传播算法(LPA)

    在Graph领域,社区发现(Community detection)是一个非常热门且广泛的话题,后面会写一个系列,该问题实际上是从子图分割的问题演变而来,在真实的社交网络中,有些用户之间连接非常紧密, ...

  4. 【知识图谱】两种 Python 方法实现社区发现之标签传播算法(LPA)

    在Graph领域,社区发现(Community detection)是一个非常热门且广泛的话题,后面会写一个系列,该问题实际上是从子图分割的问题演变而来,在真实的社交网络中,有些用户之间连接非常紧密, ...

  5. 社区发现(三):LPA算法(标签传播算法)

    引用:https://blog.csdn.net/itplus/article/details/9286905 引用:https://www.jianshu.com/p/0c66b2717972 文章 ...

  6. 可视化学习:社团划分算法——标签传播算法LPA及优化

    标签传播算法 一.社团划分质量 二.标签传播算法(LPA) 三.优化算法 1.基于传播分数的标签传播算法(LPA-S) 2.基于邻居优势的标签传播算法(LPA-N) 3.基于叶子社团合并的标签传播算法 ...

  7. 浅谈标签传播算法LPA

       研究生期间第一次对相关内容做了一个汇报,查找了大量文献,发现很多的介绍对于新手来说都看不懂,这里采用最简单的方法来浅谈一下,如有错误,欢迎指正.   标签传播算法是一种基于图的半监督学习方法,其 ...

  8. 标签传播算法_复杂网络社区发现算法汇总

    社区发现 这篇文章汇总了一些常见的社区发现概念和算法,包括 Modularity Q Fast Unfolding(Louvain Algorithm) LPA SLPA KL算法 GN算法 社区: ...

  9. 网络算法系列之社区发现(一):标签传播算法

    社区发现简介   社区发现问题实际上是从子图分割的问题演变而来.在社交网络中,有些用户连接非常紧密,有些用户连接较为稀疏,这些连接紧密的用户可以看做一个社区,而社区之间连接较为稀疏.下图就展示了一个社 ...

最新文章

  1. 2021年大数据ZooKeeper(五):ZooKeeper Java API操作
  2. [BZOJ1103][POI2007]大都市meg
  3. csgo如何保存自己的cfg_KXCSGO:CSGO开箱饰品交易方法
  4. 2016.07.13-vectorvectorint应用2——Two Sum扩展
  5. rtp h264打包和解包
  6. 《ASP.NET 1.1入门经典—— VISUAL C# .NET 2003编程篇》学习笔记和心得 - 第十章
  7. 用JavaScript实现的设计模式之commandline(命令行)模式
  8. Unichar, char, wchar_t
  9. Linux系统下安装CodeBlocks
  10. SpringBoot 优雅的配置拦截器方式
  11. xadmin实现表单验证
  12. 静态对象和非静态对象的区别
  13. 凤凰刷机找不到手机设备的解决方法
  14. 硬件工程师常用网站-芯片手册免费下载
  15. SVM支持向量机原理详解
  16. Windows XP_修改登录背景图案
  17. matlab计算潮差程序,t_tide潮汐潮流调和分析工具包教程
  18. 无鸭不过秋,这样吃鸭润燥解乏!
  19. 试用python库meteva(气象行业)
  20. 【转详解步进电机工作原理】

热门文章

  1. 信息学奥赛一本通C++语言——1030: 计算球的体积
  2. 信息学奥赛一本通C++语言——1031:反向输出一个三位数
  3. linuxPci驱动获取指定设备bus、device以及devfn数据方式
  4. php删除oracle数据记录日志文件,Oracle手动切换日志文件和清空日志文件
  5. bigdecimal 除法保留两位小数_【名师课堂】苏教数学五年级上总复习9.4小数的四则计算...
  6. STM32那点事(5)_ADC(中)
  7. 笨方法“学习python笔记之字典
  8. vue 跨域问题 - 总结篇
  9. 电子计算机诞生于1946年第几台,人类第一台电子计算机诞生于1946年2月
  10. asp net html.dropdownlist viewdata 指定选中项_ASP.NET Web API基础(05)--- 基于JWT的身份认证 - 高原秃鹫...