LPA算法简介

news2024/11/29 22:35:42

1. 背景

      标签传播算法(Label Propagation Algorithm)是一种基于图的半监督学习方法,其基本思路是用已标记节点的标签信息去预测未标记节点的标签信息。

2. 算法流程

1. 为每个节点随机的指定一个自己特有的标签;

2. 逐轮刷新所有节点的标签,直到所有节点的标签不再发生变化为止。

对于每一轮刷新,节点标签的刷新规则如下:

        对于某一个节点,考察其所有邻居节点的标签,并进行统计,将出现个数最多的那个标签赋值给当前节点。当个数最多的标签不唯一时,随机选择一个标签赋值给当前节点。

        在LPA中,节点的标签更新通常有同步更新和异步更新两种方法。

1. 同步更新:节点x在t时刻的更新是基于邻接节点在t-1时刻的标签;

2. 异步更新:节点x在t时刻更新时,其部分邻接节点是t时刻更新的标签,还有部分的邻接节点是t-1时刻更新的标签。

        LPA算法在标签传播过程中采用的是同步更新,但同步更新应用在二分结构网络中,容易出现标签震荡的现象。因此,之后大多采用异步更新策略来避免这种现象的出现。

3. 算法原理

3.1 相似矩阵构建

       令( x1,y1) … ( xl,yl) 是已标注数据,YL={ y1…yl} ∈{ 1…C} 是类别标签,类别数 C 已知,且均存在于标签数据中。令( xl + 1,yl + 1) …( xl + u,yl + u) 为未标注数据,YU={ yl + 1 … yl + u} 不可观测,l << u,n=l+u。令数据集 X = { x1…xl + u} ∈R。问题转换为: 从数据集 X 中,利用YL的学习,为未标注数据集YU的每个数据找到对应的标签。将所有数据作为节点(包括已标注和未标注数据),创建一个图,这个图的构建方法有很多,这里我们假设这个图是全连接的,节点i和节点j的边权重为:\omega _{ij}=exp(-\frac{\left \| x_{i}-x_{j} \right \|^{2}}{\alpha ^{2}}),这里α是超参。

        还有个非常常用的图构建方法是knn图,也就是只保留每个节点的k近邻权重,其他的为0,也就是不存在边,因此是稀疏的相似矩阵。

 2.2 LPA算法

       通过节点之间的边传播 label。边的权重越大,表示两个节点越相似,那么label越容易传播过去。定义一个N x N的概率转移矩阵P:

P_{ij}=P(i \rightarrow j) = \frac{\omega _{ij}}{\sum_{k=1}^{n}\omega _{ik}}   ,   P_{ij} 表示从节点 i 转移到节点 j 的概率。

        将 YL 和 YU 合并,得到一个N x C的 soft label 矩阵 F=[YL; YU]。

        soft label的意思是,保留样本 i 属于每个类别的概率,而不是互斥性的,这个样本以一个概率属于一个类。最后确定这个样本 i 类别时,取概率最大的那个类作为它的类别。

        F 里面有个YU,一开始是不知道的,最开始随便设置一个值就可以了。

  简单的LP算法如下:

1. 执行传播:F=PF;

2. 重置F中样本的标签:FL=YL;

3. 重复步骤(1)和(2)直到F收敛。

        步骤(1)就是将矩阵 P 和矩阵 F 相乘,这一步,每个节点都将自己的 label 以 P 确定的概率传播给其他节点。如果两个节点越相似(在欧式空间中距离越近),那么对方的 label 就越容易被自己的 label 赋予。步骤(2)非常关键,因为 labeled 数据的 label 是事先确定的,它不能被带跑,所以每次传播完,它都得回归它本来的 label。

2.3 变身的LPA算法

       每次迭代都是计算一个 soft label 矩阵 F=[YL; YU],但是 YL 是已知的,计算它没有什么用,在步骤(2)的时候,还得把它弄回来。我们关心的只是 YU,那能不能只计算 YU 呢?将矩阵P做以下划分:

P=\begin{bmatrix} P_{LL} & P_{LU} \\ P_{UL} & P_{UU} \end{bmatrix}

令   f=\binom{f_{L}}{f_{U}}   

这时算法就一个运算:

f_{U}\leftarrow P_{UU}f_{U} + P_{UL}Y_{L}

        迭代上面这个步骤直到收敛就ok了。可以看到 f_{U} 不但取决于 labeled 数据的标签及其转移概率,还取决了 unlabeled 数据的当前 label 和转移概率。因此 LP 算法能额外运用 unlabeled 数据的分布特点。

2.4 收敛性证明

当n趋近于无穷大是,有

因此

4. 优缺点

4.1 优点

1. 算法逻辑简单,时间复杂度低,接近线性复杂度,在超大规模网络下会有优异的性能,适合做社区发现的baseline;
2. 无须定义优化函数,无须事先指定社区个数,算法会利用自身的网络结构来指导标签传播。

4.2 缺点

1. 雪崩效应:社区结果不稳定,随机性强。由于当邻居节点的社区标签权重相同时,会随机取一个。导致传播初期一个小的错误被不断放大,最终没有得到合适的结果。尤其是异步更新时,更新顺序的不同也会导致最终社区划分结果不同。

        上图中展示了一次 LPA 的流程:初始化阶段,每个节点都以自己作为社区标签。比如a的社区就是a,c的社区就是c。当进入传播阶段,节点c的邻居节点共4个:a,b,c,d。而社区标签也是4个:a,b,c,d,假设随机取了一个a。如果是异步更新,此时b,d,e三个节点的邻居节点中社区标签均存在2个a,所以他们都会立马更新成a。如果c当时随机选择的是b,那么d,e就会更新成b,从而导致b社区标签占优,而最终的社区划分也就成b了。

2. 震荡效应:社区结果来回震荡,不收敛,当传播方式处于同步更新的时候,尤其对于二分图或子图存在二分图的结构而言,极易发生。

        上图中展示了一次二分图中 LPA 的流程,在同步更新的时候,每个节点依赖的都是上一轮迭代的社区标签。当二分图左边都是a,右边都是b时,a社区的节点此时邻居节点都是b,b社区的节点此时邻居节点都是a,根据更新规则,此时a社区的节点将全部更新为b,b社区的节点将全部更新为a。此时算法无法收敛,使得整个网络处于震荡中。

参考:【知识图谱】两种 Python 方法实现社区发现之标签传播算法(LPA)_标签传播算法 python-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1603066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音乐小程序|基于微信开发音乐小程序的系统设计与实现(源码+数据库+文档)

音乐小程序目录 基于微信开发音乐小程序的系统 一、前言 二、系统设计 三、系统功能设计 小程序端&#xff1a; 后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师…

开箱即用之 windows装的MongoDB 服务无法开机自启

先把mongo服务手动停止 以管理员的身份打开黑窗口&#xff0c;并移除系统服务 进入mongod.exe文件所在目录 mongod.exe --remove --serviceName "MongoDB" 在你mongo的data目录下&#xff0c;移除两个文件 mongod.lock strage.bson 重新将服务加入开机自启的系…

测试使用Python GDAL 下载Mapbox瓦片地图及拼接

测试使用 Python GDAL 下载 Mapbox 瓦片地图及拼接 本教程将展示如何以编程方式从网络地图&#xff08;通常称为瓦片地图&#xff09;瓦片服务器下载地图图像&#xff0c;对其进行地理参考&#xff08;设置坐标系&#xff09;并将其保存为GeoTIFF。 Code import lib #!/usr…

2011-2022年上市公司新质生产力测算数据(含原始数据+计算代码+计算结果)

2011-2022年上市公司新质生产力测算数据&#xff08;含原始数据计算代码计算结果&#xff09; 1、时间&#xff1a;2011-2022年 2、来源&#xff1a;原始数据整理自csmar、wind 3、指标&#xff1a;证券代码、证券简称、统计截止日期、报表类型、营业收入、研发费用、资产减…

一起Talk Android吧(第五百五十七回:如何获取文件读写权限)

文章目录 1. 概念介绍2. 使用方法3. 示例代码4. 内容总结各位看官们大家好,上一回中分享了一个Retrofit使用错误的案例,本章回中将介绍 如何获取文件读写权限。闲话休提,言归正转,让我们一起Talk Android吧! 1. 概念介绍 我们在本章回中说的文本读写权限是指读写手机中的…

说说你对树的理解?相关的操作有哪些?

一、是什么 在计算机领域&#xff0c;树形数据结构是一类重要的非线性数据结构&#xff0c;可以表示数据之间一对多的关系。以树与二叉树最为常用&#xff0c;直观看来&#xff0c;树是以分支关系定义的层次结构 二叉树满足以下两个条件&#xff1a; 本身是有序树树中包含的…

在Linux系统中设定延迟任务

一、在系统中设定延迟任务要求如下&#xff1a; 要求&#xff1a; 在系统中建立easylee用户&#xff0c;设定其密码为easylee 延迟任务由root用户建立 要求在5小时后备份系统中的用户信息文件到/backup中 确保延迟任务是使用非交互模式建立 确保系统中只有root用户和easylee用户…

OpenAI Token计算方式

如果用 ChatGPT API 去做问答的话是需要付费的&#xff0c;OpenAI 的收费方式是通过 token 数量进行收费&#xff0c;API 价格根据不同模型有所不同&#xff0c;可以看到 GPT4 最贵&#xff0c;GPT3.5 最便宜。这让我想起以前用 Aliyun 中台&#xff0c;每个 SQL 都有个运行价格…

部署Zabbix5.0

一.部署zabbix客户端 端口号10050 zabbix 5.0 版本采用 golang 语言开发的新版本客户端 agent2 。 zabbix 服务端 zabbix_server 默认使用 10051 端口&#xff0c;客户端 zabbix_agent2 默认使用 10050 端口。 1.1.关闭防火墙和selinux安全模块 systemctl disable --now fir…

数据库工具解析之 OceanBase 数据库导出工具

背景 大多数的数据库都配备了自己研发的导入导出工具&#xff0c;对于不同的使用者来说&#xff0c;这些工具能够发挥不一样的作用。例如&#xff1a;DBA可以使用导数工具进行逻辑备份恢复&#xff0c;开发者可以使用导数工具完成系统间的数据交换。这篇文章主要是为OceanBase…

Linux——操作系统与进程基本概念

Linux——操作系统与进程基本概念 文章目录 Linux——操作系统与进程基本概念一、冯诺依曼体系结构二、操作系统2.1 OS层次图2.2 操作系统的作用2.3 管理的理解 三、进程3.1 进程的概念3.2 描述进程—PCB3.3 PCB的内容3.3.1 查看进程3.3.2 标识符3.3.3 状态3.3.4 程序计数器3.3…

react中关于类式组件和函数组件对props、state、ref的使用

文章中有很多蓝色字体为扩展链接&#xff0c;可以补充查看。 常用命令使用规则 组件编写方式: 1.函数式 function MyButton() { //直接return 标签体return (<>……</>); }2.类 class MyButton extends React.Component { //在render方法中&#xff0c;return…

matlab关于COE文件之读取操作

平台&#xff1a;matlab2021b 场景&#xff1a;在使用fir滤波器后&#xff0c;我们使用matlab生成coe文件后。在xilinx新建IP的后&#xff0c;数据流经过FIR的IP核后数据位宽变宽。这时候我们需要对数据进行截位。这时候需要读取coe文件求和后&#xff0c;计算我们需要截位的位…

Postman之版本信息查看

Postman之版本信息查看 一、为何需要查看版本信息&#xff1f;二、查看Postman的版本信息的步骤 一、为何需要查看版本信息&#xff1f; 不同的版本之间可能存在功能和界面的差异。 二、查看Postman的版本信息的步骤 1、打开 Postman 2、打开设置项 点击页面右上角的 “Set…

数据加密、文档加密为什么都选择安企神软件

数据加密、文档加密为什么都选择安企神软件 免费试用安企神 在数据加密和文件加密领域&#xff0c;有众多优秀的软件&#xff0c;他们功能各异、价格不同、效果也大相径庭&#xff0c;经过对比使用、用户口碑和技术网站评判&#xff0c;安企神在各方面都稳坐第一把交易。其原…

笔记强训 || NC313 两个数组的交集 || 哈希表/去重+排序+遍历查找+插入ret

题目解析 两个不同整数数组&#xff0c;其中两个数组均是无序且有多个重复项。找到两个数组中的公共元素并返回。此时&#xff0c;需要注意&#xff0c;返回值中并没有重复项&#xff0c;也就是如果数据均一致&#xff0c;返回一个数字即可。 算法原理 思路 就是将一个数组…

【编程TOOL】VC++6.0下载安装配置使用保姆式教程

目录 ​编辑 1.软件介绍 2.软件下载 3.软件安装 3.1.下载得到可执行文件并双击进行安装 3.2. 点击下一步 3.3. 选择安装位置 3.4. 勾选“创建桌面快捷方式”并点击下一步 5. 点击安装并等待 3.6. 先取消运行&#xff0c;后点击完成&#xff0c;软件即安装完毕 4.兼容性配置 4.1…

代码随想录算法训练营DAY28(记录)|C++回溯算法Part.5|491.递增子序列、46.全排列、47.全排列II

文章目录 491.递增子序列思路伪代码CPP代码优化代码 46.全排列思路伪代码CPP代码 47.全排列IICPP代码 491.递增子序列 力扣题目链接 文章链接&#xff1a;491.递增子序列 视频连接&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列…

零基础小白,如何入门计算机视觉?

目录 前言 计算机视觉技术学习路线 基础知识 1. 数学基础 2. 编程基础 3. 图像处理基础 基础算法与技术 1. 特征提取与描述符 2. 图像分割与对象检测 3. 三维重建与立体视觉 机器学习与深度学习 1. 机器学习基础 2. 深度学习 高级主题与应用 1. 高级机器学习与深度学习 2. 计算…

2024年MathorCup数模竞赛C题问题一二+部分代码分享

C题持续更新中 问题一问题二代码混合ARIMA-LSTM模型构建完整数据与代码第一问第二问 问题一 问题一要求对未来30天每天及每小时的货量进行预测。首先&#xff0c;利用混合ARIMA-LSTM模型进行时间序列预测。ARIMA模型擅长捕捉线性特征和趋势&#xff0c;而LSTM模型处理非线性关…