【课堂笔记】标签传播算法Label Propagation Algorithm(LPA)

news2025/6/4 18:02:44

文章目录

  • 问题背景
  • 基本假设
  • 算法步骤
  • 数学原理解剖
  • 算法收敛性

问题背景

  标签传播算法(Label Propagation Algorithm, LPA)主要解决的是数据标注不足的实际问题。在许多现实世界的机器学习任务中,获取大量标注数据(即带有正确标签的样本)成本高昂,例如需要专家参与(如医疗影像标注)或耗费大量时间(如语音转录)。
  未标注数据通常包含有关数据分布的宝贵信息,例如数据点之间的相似性或聚集模式(流形结构)。
  LPA通过构建图结构,基于数据的相似性(流形假设:相似的数据点倾向于具有相同标签)将已知标签传播到未标注数据,挖掘未标注数据的潜在结构。这是一种半监督学习的算法。

基本假设

(1)样本可用性假设:未标记的样本获取成本较低,所以有更多未标记的样本可供选择(相比已标记样本)
(2)流形假设:数据点在高维空间中分布在一个低维流形上,相似的数据点(即在流形上靠近的点)更有可能具有相同的标签。
(3)平滑性假设:模型的预测函数在数据空间中应该是平滑的
(4)簇假设:数据的不同类别形成分离的簇,决策边界应位于低密度区域,而不是穿过高密度区域。

算法步骤

(1)构建图结构
  将所有数据点(已标记和未标记,共 M + N M+N M+N 个,其中 M M M 是已标记数据, N N N 是未标记数据)表示为图的节点。
  边的权重 w i , j w_{i,j} wi,j 表示节点 i i i j j j 之间的相似度(例如,基于欧氏距离、余弦相似度或高斯核)。通常只连接最近邻节点(通过 k-NN 或 ϵ \epsilon ϵ-邻域方法)以减少计算复杂度。
(2)构建转移矩阵
  构造一个 ( M + N ) × ( M + N ) (M+N) \times (M+N) (M+N)×(M+N) 的转移矩阵 T \mathbf{T} T,表示从节点 j j j 到节点 i i i 的归一化转移概率。其中
T i , j = w i , j ∑ k w i , k \mathbf{T}_{i,j} = \frac{w_{i,j}}{ \underset{k}{\sum}w_{i,k}} Ti,j=kwi,kwi,j
   T \mathbf{T} T 反映了标签传播的强度,基于数据点之间的相似性。
(3)初始化标签矩阵
  定义一个 ( M + N ) × C (M+N) \times C (M+N)×C 的标签矩阵 Y \mathbf{Y} Y,其中 C C C 是类别数。
  对于已标记数据, Y \mathbf{Y} Y 的对应行初始化为独热编码(one-hot,例如 [ 1 , 0 , 0 ] [1, 0, 0] [1,0,0] 表示类别 1)。
  对于未标记数据, Y \mathbf{Y} Y 的对应行初始化为零向量或均匀分布。
(4)迭代传播标签
  迭代更新: Y ← T Y \mathbf{Y} \leftarrow \mathbf{T} \mathbf{Y} YTY,即通过转移矩阵传播标签概率。每次迭代后,归一化 Y \mathbf{Y} Y 的每一行,使其表示有效的概率分布。
  对于已标记数据,固定其标签(将对应行重新设为独热编码),以防止标签被覆盖。
  重复迭代直到 Y \mathbf{Y} Y 收敛(标签概率稳定)或达到最大迭代次数。
(5)输出预测
  收敛后, Y \mathbf{Y} Y 的每一行表示对应数据点的类别概率分布。
  对未标记数据,取最大概率的类别作为最终预测标签。

数学原理解剖

  现在我们有了一张图 G = ( V , E ) \mathbf{G} = (\mathbf{V}, \mathbf{E}) G=(V,E),其中点集 ∣ V ∣ = M + N |\mathbf{V}|=M+N V=M+N,边集 E = {   e u , v = ( u , v , w u v )   } \mathbf{E} = \set{e_{u, v} = (u, v, w_{uv})} E={eu,v=(u,v,wuv)},还有了一个标签矩阵 Y ∈ R ( M + N ) × C \mathbf{Y} \in \mathbb{R}^{(M+N) \times C} YR(M+N)×C,一个转移矩阵 T ∈ R ( M + N ) × ( M + N ) \mathbf{T} \in \mathbb{R}^{(M+N) \times (M+N)} TR(M+N)×(M+N),我们来分析步骤中矩阵乘法在图上的意义:
(1)独热编码,初始化:如果某个点 i i i的标签是 2 2 2,标签集合为 {   1 , 2 , 3   } \set{1, 2, 3} {1,2,3},则它的独热编码为 p i ( 0 ) = [ 0 , 1 , 0 ] p^{(0)}_i = [0, 1, 0] pi(0)=[0,1,0],这里实际上表示了它标签的概率分布。
  对于这个 i i i(实际标签确定),则它标签为 2 2 2的概率为 100 % 100\% 100%,其余为 0 % 0\% 0%
  对于不确定标签的点,初始化为全零(注意这不是一个合法的概率分布,因为总和不为1,所以后续更新需要不断进行归一化)
(2)迭代更新 Y ( t + 1 ) = T Y ( t ) \mathbf{Y}^{(t+1)} = \mathbf{T} \mathbf{Y}^{(t)} Y(t+1)=TY(t),每个节点的标签概率变成它所有邻居标签概率的加权平均,权重就是边的相似度。
  假设某个点第 t t t次迭代的概率分布为 p i ( t ) = [ p i , 1 ( t ) , . . . , p i , C ( t ) ] p^{(t)}_i = [p^{(t)}_{i,1}, ..., p^{(t)}_{i,C}] pi(t)=[pi,1(t),...,pi,C(t)],这是 Y \mathbf{Y} Y的第 i i i行;它对应的转移向量为 T i = [ T i , 1 , . . . , T i , ( M + N ) ] T_{i} = [T_{i,1}, ..., T_{i,(M+N)}] Ti=[Ti,1,...,Ti,(M+N)],它是 T \mathbf{T} T的第 i i i行,则下一次更新的概率分布应为:
p i ( t + 1 ) = ∑ M + N k = 1 T i , k p k ( t ) p_{i}^{(t+1)} = \underset{k=1}{\overset{M+N}{\sum}}T_{i, k}p_{k}^{(t)} pi(t+1)=k=1M+NTi,kpk(t)
即每个点 k k k根据转移的权重把它们的分布加给点 i i i。于是写成矩阵的样子也就是 Y ( t + 1 ) = T Y ( t ) \mathbf{Y}^{(t+1)} = \mathbf{T} \mathbf{Y}^{(t)} Y(t+1)=TY(t)
(3)归一化:保证每个点的概率分布总和为 1 1 1,否则不是个合法的概率。

算法收敛性

  怎么理解这个算法最终会趋于稳定?这里给出粗略的直观理解。
  关键在于有已知标签的点的存在,它们从始至终都是稳定的。而每次更新,不确定的点都会根据相似性从邻居那里获取信息,从而使信息不断在图中散布,稳定性从确定点开始不断影响不确定的点,最终使整张图趋于稳定。

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

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

相关文章

Dify案例实战之智能体应用构建(一)

一、部署dify Windows安装Docker部署dify,接入阿里云api-key进行rag测试-CSDN博客 可以参考我的前面文章,创建一个本地dify或者直接dify官网使用一样的(dify官网需要科学上网) 二、Dify案例实战之智能体 2.1 智能面试官 需求;…

从模式到架构:Java 工厂模式的设计哲学与工程化实践

一、工厂模式概述 (一)定义与核心思想 工厂模式(Factory Pattern)是软件开发中常用的创建型设计模式,其核心思想是将对象的创建过程封装起来,通过工厂类来统一管理对象的创建逻辑。这种模式分离了对象的创…

docker问题记录

docker pull镜像: 即使配置了镜像源也还是走的国外的镜像源: 解决办法:在pull镜像的时候强制走自己的镜像 比如:拉取rabbitmq,强制使用"https://docker.m.daocloud.io"这个镜像 docker pull docker.m.da…

设计模式——代理设计模式(结构型)

摘要 本文详细介绍了代理设计模式,包括其定义、结构组成、实现方式、适用场景及实战示例。代理设计模式是一种结构型设计模式,通过代理对象控制对目标对象的访问,可增强功能或延迟加载等。文中通过类图、时序图、静态代理、JDK动态代理、CGL…

从“固定“到“流动“:移动充电如何重塑用户体验?

在传统充电模式中,"固定"不仅是技术的特征,更成为用户行为的枷锁——人们需要规划行程、寻找插座、等待电量填满,这种被动适配正在被移动充电技术颠覆。当充电设备从墙面解放,化身可携带的能源胶囊,甚至嵌入…

玩客云 OEC/OECT 笔记(1) 拆机刷入Armbian固件

目录 玩客云 OEC/OECT 笔记(1) 拆机刷入Armbian固件玩客云 OEC/OECT 笔记(2) 运行RKNN程序 外观 内部 PCB正面 PCB背面 PCB背面 RK3566 1Gbps PHY 配置 OEC 和 OECT(OEC-turbo) 都是基于瑞芯微 RK3566/RK3568 的网络盒子, 没有HDMI输入输出. 硬件上 OEC 和 OECT…

GIS数据类型综合解析

GIS数据类型综合解析 目录 GIS数据类型综合解析1. 总体介绍2. GIS数据类型分类与对比2.1 主要数据类型对比表 3. 详细解析与扩展内容3.1 矢量数据(Vector Data)3.2 栅格数据(Raster Data)3.3 属性数据(Attribute Data&…

Prometheus + Grafana 监控常用服务

一、引言 Prometheus监控常见服务的原理主要包括服务暴露指标和Prometheus抓取指标。一方面,被监控服务通过自身提供的监控接口或借助Exporter将服务的性能指标等数据以HTTP协议的方式暴露出来;另一方面,Prometheus根据配置好的采集任务&…

6月1日星期日今日早报简报微语报早读

6月1日星期日,农历五月初六,早报#微语早读。 1、10个省份城镇化率超70%,广东城镇人口超9700万; 2、长沙居民起诉太平财险不赔“新冠险”,立案878天后获胜判; 3、海口:全市范围内禁止投放互联…

如何在 Ubuntu 24.04 服务器上安装 Apache Solr

Apache Solr 是一个免费、开源的搜索平台,广泛应用于实时索引。其强大的可扩展性和容错能力使其在高流量互联网场景下表现优异。 Solr 基于 Java 开发,提供了分布式索引、复制、负载均衡及自动故障转移和恢复等功能。 本教程将指导您如何在 Ubuntu 24.…

unity编辑器扩展dll形式展示

1.背景:最近搞工程迁移发现一旦c#报错就会导致编辑器菜单没法使用,做了一些尝试发现使用dll的方式会是不错的选择。当然有些工具还是建议用外部的c#工程来写比如winform. 2.遇到的问题:我记得之前2017年左右的时候做一个unity的dll工程并不需…

vscode中launch.json、tasks.json的作用及实例

文章目录 launch.json是什么作用多环境调试简单实例进阶使用核心配置项解析调试第三方程序 launch.json是什么 顾名思义:它是在.vscode文件夹下的launch.json,所以是vscode启动调试的配置文件。总结:通过定义调试参数、环境变量和启动方式&a…

VScode编译调试debug,gpu的cuda程序,Nsight

进行下面操作的前提是,我们的环境已经能跑简单的CUDA程序了。 一、安装Nsight 二、创建launch.json文件 {"version": "0.2.0","configurations": [{"name": "CUDA C: Launch","type": "cuda-gdb…

中企出海大会|打造全球化云计算一张网,云网络助力中企出海和AI创新

全球化是阿里云的长期战略,未来阿里云将持续加大云和 AI 基础设施建设投入。首先是加速打造全球化的云计算网络,一张具备 AI技术服务能力和全球竞争力的云计算网络是阿里云的长期目标。 —— 阿里巴巴集团 CEO、阿里云智能集团董事长兼 CEO 吴泳铭 5 月 …

防范DDoS攻击,服务器稳定性崩溃的根源与高效防御对策

DDoS攻击(分布式拒绝服务攻击)已成为危害服务器稳定性和业务连续性的主要因素之一。本文将深入探讨为什么服务器一遇到DDoS攻击就崩溃,以及如何从根本上实现有效防御和应对这一威胁,帮助企业提升网络安全水平。 具体内容如下&…

深入理解 SELinux:通过 Nginx 和 SSH 服务配置实践安全上下文与端口策略

目录 一、引言 二、实验环境说明 三、实验 1:Nginx 服务安全上下文配置 3.1 实验目标 3.2 操作步骤 1. 开启 SELinux 并重启系统 2. 安装 Nginx 并创建自定义目录 3. 配置 Nginx 指向自定义目录 4. 分析 SELinux 上下文冲突 5. 修改上下文为合法类型 6. 验…

C++ —— STL容器——string类

1. 前言 本篇博客将会介绍 string 中的一些常用的函数,在使用 string 中的函数时,需要加上头文件 string。 2. string 中的常见成员函数 2.1 初始化函数 string 类中的常用的初始化函数有以下几种: 1. string() …

用JS实现植物大战僵尸(前端作业)

1. 先搭架子 整体效果&#xff1a; 点击开始后进入主场景 左侧是植物卡片 右上角是游戏的开始和暂停键 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

Electron-vite【实战】MD 编辑器 -- 文件列表(含右键快捷菜单,重命名文件,删除本地文件,打开本地目录等)

最终效果 页面 src/renderer/src/App.vue <div class"dirPanel"><div class"panelTitle">文件列表</div><div class"searchFileBox"><Icon class"searchFileInputIcon" icon"material-symbols-light:…

华为云Flexus+DeepSeek征文|华为云Flexus云服务器X实例上部署Dify:打造高效的开源大语言模型应用开发平台

目录 前言 1 Dify与华为云部署概述 1.1 什么是 Dify 1.2 华为云与 Flexus 云服务器的优势 2 云服务器部署 Dify 的步骤详解 2.1 模板选择 2.2 参数配置 2.3 资源栈设置 2.4 确认部署信息并执行 3 部署成功后的操作与平台使用指南 3.1 访问平台 3.2 设置管理员账号 …