当前位置: 首页 > news >正文

【机器学习】机器学习的基本分类-半监督学习(Semi-supervised Learning)

半监督学习是一种介于监督学习无监督学习之间的机器学习方法。它利用少量的标注数据(有监督数据)和大量的未标注数据(无监督数据)来进行模型训练,从而在标注数据不足的情况下,提升模型的性能。


半监督学习的特点

  1. 数据特性
    • 标注数据成本高(如需要人工标注)。
    • 未标注数据易得且数量庞大。
  2. 目标
    • 使用未标注数据改进监督学习模型的性能。
  3. 假设
    • 相似性假设(Cluster Assumption):相似的数据点有相同的类别。
    • 平滑性假设(Smoothness Assumption):靠近的样本具有相似的输出。
    • 流形假设(Manifold Assumption):数据点在低维流形上分布。

半监督学习的算法分类

1. 基于生成模型

使用生成模型捕捉数据分布,从而利用未标注数据。
典型方法:

  • 高斯混合模型(GMM)
  • 变分自编码器(VAE)
2. 自训练(Self-training)
  • 思路
    • 使用初始标注数据训练一个模型;
    • 让模型对未标注数据进行预测,将置信度高的预测结果作为伪标签;
    • 使用新增的伪标签更新模型。
  • 优点:简单易实现。
  • 缺点:伪标签错误会导致模型退化。
3. 协同训练(Co-training)
  • 思路
    • 使用两种互补的特征视角分别训练两个模型;
    • 每个模型生成伪标签并互相标注数据。
  • 典型应用:网页分类、信息检索。
4. 图半监督学习
  • 思路
    • 将数据建模为图结构,节点表示样本,边权重表示样本相似度;
    • 使用标签传播算法(Label Propagation)在图上传播标签。
  • 典型方法
    • 标签传播(Label Propagation)
    • 谱图方法(Graph Laplacian)
5. 对比学习
  • 思路
    • 在无监督情况下学习样本的特征表示,使相似样本在表示空间中更接近。
    • 然后结合标注数据进行分类或回归。
6. 一致性正则化(Consistency Regularization)
  • 思路
    • 假设模型在未标注数据上的预测应对输入的轻微扰动保持一致;
    • 对输入添加噪声或数据增强,约束模型输出的稳定性。
  • 典型方法:Pseudo-labeling,Mean Teacher。

常见半监督学习模型

1. Semi-supervised SVM(S^3VM)
  • 通过引入未标注数据的目标函数,增强决策边界的平滑性。
2. 半监督生成对抗网络(Semi-supervised GANs)
  • 使用生成对抗网络(GAN)生成数据并改进分类器性能。
3. Ladder Networks
  • 在网络中加入无监督分支,通过重构未标注数据,辅助训练。

半监督学习的损失函数

  1. 监督部分损失(有标注数据):

    L_{\text{sup}} = \frac{1}{N} \sum_{i=1}^N \mathcal{L}(f(x_i), y_i)
  2. 无监督部分损失(未标注数据):

    • 伪标签损失

                                           L_{\text{unsup}} = \frac{1}{M} \sum_{j=1}^M \mathcal{L}(f(x_j), \hat{y}_j)
    • 一致性正则化损失

                                          L_{\text{consistency}} = \frac{1}{M} \sum_{j=1}^M ||f(x_j) - f(x_j')||^2
      x_j' 为添加扰动后的样本。
  3. 总损失

    L_{\text{total}} = L_{\text{sup}} + \lambda L_{\text{unsup}}

应用场景

  1. 自然语言处理(NLP)
    • 情感分析、文本分类。
  2. 计算机视觉
    • 图像分类、目标检测。
  3. 医学影像分析
    • 标注数据稀缺场景下的疾病诊断。
  4. 推荐系统
    • 利用未标注用户行为改进推荐质量。

Python 示例:自训练方法

以下是一个简单的自训练实现伪代码:

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import numpy as np# 生成数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 模拟未标注数据
X_train_labeled, X_train_unlabeled, y_train_labeled, _ = train_test_split(X_train, y_train, test_size=0.7, random_state=42)# 初始化模型
model = RandomForestClassifier()# 训练初始模型
model.fit(X_train_labeled, y_train_labeled)# 自训练过程
for _ in range(5):  # 多次迭代# 对未标注数据预测pseudo_labels = model.predict(X_train_unlabeled)pseudo_probs = model.predict_proba(X_train_unlabeled).max(axis=1)# 筛选高置信度样本high_confidence_idx = pseudo_probs > 0.9X_high_confidence = X_train_unlabeled[high_confidence_idx]y_high_confidence = pseudo_labels[high_confidence_idx]# 合并伪标签数据X_train_labeled = np.vstack((X_train_labeled, X_high_confidence))y_train_labeled = np.hstack((y_train_labeled, y_high_confidence))# 移除已标注的未标注数据X_train_unlabeled = X_train_unlabeled[~high_confidence_idx]# 重新训练模型model.fit(X_train_labeled, y_train_labeled)# 测试模型
accuracy = model.score(X_test, y_test)
print(f"Accuracy: {accuracy:.2f}")

输出结果

Accuracy: 0.84


总结

半监督学习通过利用未标注数据的潜在信息,在标注数据有限的场景下显著提高了模型的性能。根据具体任务和数据特点,可以选择不同的半监督方法来优化模型效果。

相关文章:

【机器学习】机器学习的基本分类-半监督学习(Semi-supervised Learning)

半监督学习是一种介于监督学习和无监督学习之间的机器学习方法。它利用少量的标注数据(有监督数据)和大量的未标注数据(无监督数据)来进行模型训练,从而在标注数据不足的情况下,提升模型的性能。 半监督学习…...

RAG挑战及其解决方案:实践中的应对策略

RAG挑战及其解决方案:实践中的应对策略 在将检索增强生成(RAG)技术应用于生产环境的过程中,我发现了许多在原型设计阶段不易察觉的挑战。RAG结合了生成模型和检索机制,以调用外部知识,从而提高语言模型的质…...

机器学习DAY7: 特征工程和特征选择(数据预处理)(完)

本文通过特征提取、特征转换、特征选择三个过程介绍数据预处理方法,特征提取将原始数据转换为适合建模的特征,特征转换将数据进行变换以提高算法的准确性,特征选择用来删除无用的特征。 知识点 特征提取特征转换特征选择 本次实验的一些示…...

uniapp使用ucharts组件

1.ucharts准备 有两种使用方式:一种是在uni的插件市场下载(组件化开发)。一种是手动引入ucharts包。官方都封装好组件了,我们不用岂不是浪费。 直接去dcloud插件市场(DCloud 插件市场)找,第一…...

【RabbitMQ高级篇】消息可靠性问题(1)

目录 1.消息可靠性 1.1.生产者消息确认 1.1.1.修改配置 1.1.2.定义Return回调 1.1.3.定义ConfirmCallback 1.2.消息持久化 1.2.1.交换机持久化 1.2.2.队列持久化 1.2.3.消息持久化 1.3.消费者消息确认 1.3.1.演示none模式 1.3.2.演示auto模式 1.4.消费失败重试机制…...

PR视频剪辑的属性

调整运动效果 选中视频或图品素材在效果控件面板可以看到运动效果的各个参数。 在运动效果中可以调整视频素材的位置、缩放、旋转等属性。 位置属性 PR中素材的位置根据图像锚点的位置决定,由x、y轴的参数控制图像位置。一个1920px1080px的视频素材默认位置是960…...

[数据集][图像分类]常见鱼类分类数据集2w张8类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):7554(剩余1w多为测试集) 分类类别数:…...

Boost之log日志使用

不讲理论,直接上在程序中可用代码: 一、引入Boost模块 开发环境:Visual Studio 2017 Boost库版本:1.68.0 安装方式:Nuget 安装命令: #只安装下面几个即可 Install-package boost -version 1.68.0 Install…...

Spring Cloud LoadBalancer (负载均衡)

目录 什么是负载均衡 服务端负载均衡 客户端负载均衡 Spring Cloud LoadBalancer快速上手 启动多个product-service实例 测试负载均衡 负载均衡策略 自定义负载均衡策略 什么是负载均衡 负载均衡(Load Balance,简称 LB) , 是高并发, 高可用系统必不可少的关…...

ASP.NET Web应用程序出现Maximum request length exceeded报错

一、问题描述 在ASP.NET的web应用中,导出数据时出现500 - Internal server error.Maximum request length exceeded。 二、原因分析 这个错误通常出现在Web应用程序中,表示客户端发送的HTTP请求的长度超过了服务器配置的最大请求长度限制。这可能是因为…...

Modbus

【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 Modbus 是一种广泛使用的通信协议,主要用于工业自动化和控制系统中。它最初由 Modicon(现为施耐德电气的一部分)在1979年开发,旨在实现不同设备之间的通信。Modbu…...

【AI资讯汇总】2024年12月第四周

目录 OpenAI发布o3:AI 推理能力的重大突破,得分高达 87.5% 阿里通义千问Qwen开源视觉推理模型QVQ-72B-Preview OpenAI推出ChatGPT新记忆功能:能跨对话回忆用户交流 OpenAI发布ChatGPT宕机故障详细报告:只因一个小更改导致 OpenAI发布o3&a…...

Pytorch使用手册-DCGAN 指南(专题十四)

1. Introduction 本教程将通过一个示例介绍 DCGANs(深度卷积生成对抗网络)。我们将训练一个生成对抗网络(GAN),在给它展示大量真实名人照片后,它能够生成新的“名人”图片。这里的大部分代码来源于 PyTorch 官方示例中的 DCGAN 实现,而本文档将对该实现进行详细解释,并…...

c++---------------------------string

从今天开始我们就开始学c的容器了就不需要我们造轮子了 1.为什么学习string类 1.1c语言中的字符串 C 语言中,字符串是以 \0 结尾的一些字符的集合,为了操作方便, C 标准库中提供了一些 str 系列 的库函数,但是这些库函数与字符…...

PTPVT 插值说明

文章目录 PTPVT 插值说明 PTPVT 插值说明PVT Hermite插值PVT 三次多项式插值PT 插值Sin轨迹测试结果PVT Hermite插值结果PVT 三次多项式插值结果PT 插值结果 用户轨迹测试结果PVT Hermite插值结果PT 插值结果 PTPVT 插值说明 PT模式: 位置-时间路径插值算法。 PVT模…...

Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成Log4j1.x 及 原理分析

文章目录 Pre官网集成Log4j1.x步骤POM依赖使用第一步:编写 Log4j 配置文件第二步:代码 原理分析1. 获取对应的 ILoggerFactory2. 根据 ILoggerFactory 获取 Logger 实例3. 日志记录过程 小结 Pre Java - 日志体系_Apache Commons Logging(JC…...

集成RabbitMQ+MQ常用操作

文章目录 1.环境搭建1.Docker安装RabbitMQ1.拉取镜像2.安装命令3.开启5672和15672端口4.登录控制台 2.整合Spring AMQP1.sun-common模块下创建新模块2.引入amqp依赖和fastjson 3.新建一个mq-demo的模块1.在sun-frame下创建mq-demo2.然后在mq-demo下创建生产者和消费者子模块3.查…...

Gitlab17.7+Jenkins2.4.91实现Fastapi/Django项目持续发布版本详细操作(亲测可用)

一、gitlab设置: 1、进入gitlab选择主页在左侧菜单的下面点击管理员按钮。 2、选择左侧菜单的设置,选择网络,在右侧选择出站请求后选择允许来自webhooks和集成对本地网络的请求 3、webhook设置 进入你自己的项目选择左侧菜单的设置&#xff…...

Kubernetes 的资源管理方式(二)

Kubernetes 的资源管理方式 命令式对象配置 命令式对象配置就是通过命令配置和配置文件去操作 Kubernetes 的资源。 命令式对象配置的方式操作资源,可以简单的认为:命令 yaml 配置文件(里面是命令需要的各种参数)。 ① 创建一…...

一种基于动态部分重构的FPGA自修复控制器

1.FPGA动态部分重构技术 动态部分重构技术指在FPGA运行时,通过加载部分位流文件来修改FPGA可重构区域中的逻辑设计,修改过程中其余逻辑功能不受影响整个系统也能够持续运行。 下图为FPGA动态部分重构的基本原理图。通过下载A1.bit、A2.bit、A3.bit 或A4.…...

MarkItDown的使用(将Word、Excel、PDF等转换为Markdown格式)

MarkItDown的使用(将Word、Excel、PDF等转换为Markdown格式) 本文目录: 零、时光宝盒🌻 一、简介 二、安装 三、使用方法 3.1、使用命令行形式 3.2、用 Python 调用 四、总结 五、参考资料 零、时光宝盒🌻 &a…...

【Vim Masterclass 笔记01】Section 1:Course Overview + Section 2:Vim Quickstart

文章目录 Section 1:Course Introduction 课程概述S01L01 Course Overview 课程简介课程概要 S01L02 Course Download 课程资源下载S01L03 What Vim Is and Why You Should Learn It 何为 Vim?学来干啥?1 何为 Vim2 为何学 Vim Section 2&…...

BLE core 内容整理解释

本文内容比较杂散,只是做记录使用,后续会整理的有条理些 link layer 基本介绍 **Link Layer Control(链路层控制)**是蓝牙低功耗(BLE)协议栈的核心部分,负责实现设备间可靠、安全、低功耗的数…...

import org.springframework.data.jpa.repository.JpaRepository<T, ID>;

org.springframework.data.jpa.repository.JpaRepository<T, ID> 接口中的 ID 类型参数。 理解 JpaRepository<T, ID> 中的 T 和 ID&#xff1a; T (Type): T 代表的是你想要操作的 实体类 的类型。例如&#xff0c;如果你有一个名为 User 的实体类&#xff0c;那…...

抽象工厂设计模式的理解和实践

在软件开发中&#xff0c;设计模式是前人通过大量实践总结出的、可复用的、解决特定问题的设计方案。它们为我们提供了一种标准化的解决方案&#xff0c;使得代码更加简洁、灵活和易于维护。在众多设计模式中&#xff0c;抽象工厂模式&#xff08;Abstract Factory Pattern&…...

RuntimeError: CUDA error: initialization

RuntimeError: CUDA error: initialization cuda初始化出问题了&#xff0c;这是因为在python多线程跑gpu代码程序时先对cuda进行操作&#xff0c;然后在跑gpu代码时就没有cuda可用了。 在main的主程序代码加一行代码就可以了&#xff0c;用来获取cuda&#xff0c;在代码中只能…...

可信数据空间建设及应用参考指南(V1.0)

为贯彻国家数据局《可信数据空间发展行动计划&#xff08;2024-2028 年&#xff09;》&#xff0c;促进可信数据空间持续、快速和健康发展&#xff0c;相关行业专家组织编写《可信数据空间建设及应用参考指南&#xff08;V1.0&#xff09;》&#xff08;以下简称《参考指南》&a…...

目标检测文献阅读-YOLO:统一的实时目标检测(12.23-12.29)

目录 摘要 Abstract 1 引言 2 统一的检测 3 网络设计 4 训练 5 YOLOv5训练猫狗识别模型 5.1 项目代码整体结构介绍 5.2 数据集和预训练权重的准备 5.3 训练猫狗识别模型 5.3.1 修改数据配置文件 5.3.2 修改模型配置文件 5.3.3 训练模型 5.3.4 启用tensorbord查看…...

埃斯顿机器人程序案例多个点位使用变量

多个点位使用变量取放...

JVM实战—4.JVM垃圾回收器的原理和调优

大纲 1.JVM的新生代垃圾回收器ParNew如何工作 2.JVM老年代垃圾回收器CMS是如何工作的 3.线上部署系统时如何设置垃圾回收相关参数 4.新生代垃圾回收参数如何优化 5.老年代的垃圾回收参数如何优化 6.问题汇总 1.JVM的新生代垃圾回收器ParNew如何工作 (1)JVM的核心运行原理…...

【项目日记(8)】第三层:页缓存的具体实现(下)

目录 前言1. 地址空间上的内存使用情况2. 页缓存合并内存的代码实现3. 总结以及对代码的拓展 前言 请先看完上一篇文章页缓存的具体实现(上) 1. 地址空间上的内存使用情况 在地址空间中,一共是4GB大小的空间&#xff0c;地址从0000 0000到FFFF FFFF。 第0页的起始地址是0 第…...

算法题(19):多数元素

审题&#xff1a; 数组不为空且一定存在众数。需要返回众数的数值 思路&#xff1a; 方法一&#xff1a;哈希映射 先用哈希映射去存储对应数据出现的次数&#xff0c;然后遍历找到众数并输出 当然也可以在第一次映射的过程中就维护一个出现次数最多的数据&#xff0c;这样子就可…...

==、equals、hashcode

和equals区别 用于基本数据类型&#xff0c;比较的是值&#xff0c;用于引用类型&#xff0c;比较的是对象的内存地址。java中只有值传递&#xff0c;因此对于引用类型&#xff0c;实际比较的引用的内存地址的值。equals不能用来判断基本数据类型&#xff0c;只能判断引用数据…...

《优势谈判》——阅读笔记

投入 思想准备&#xff1a;一个谈判是要双赢的&#xff0c;至少需要让对手这么认为&#xff1b;进行一场谈判&#xff0c;需要看到对面是否真的愿意和你谈判 谈判技巧 永远不要接受首次报份&#xff1b;如果对方临时变更了要求&#xff0c;则可以通过立刻要求对方做补偿等方…...

mybatis-plus 用法总结

MyBatis-Plus&#xff08;简称 MP&#xff09;是 MyBatis 的增强工具&#xff0c;旨在简化开发者的 CRUD 操作。它在 MyBatis 的基础上提供了更多的功能和便利性&#xff0c;如代码生成器、分页插件、性能分析插件等&#xff0c;使开发者能够更高效地进行数据库操作。MyBatis-P…...

华为开源自研AI框架昇思MindSpore应用案例:ICNet用于实时的语义分割

ICNet用于实时的语义分割 ICNet 被广泛应用于实时的语义分割领域。它在处理图像数据时&#xff0c;能够以较高的效率进行语义分割操作&#xff0c;为相关领域的研究和实际应用提供了有力的支持。ICNet 的实时性使其在众多场景中都具有很大的优势&#xff0c;例如在视频处理、自…...

CAN201 Introduction to Networking(计算机网络)Pt.2 传输层

文章目录 3. Transport Layer&#xff08;传输层&#xff09;3.1 Multiplexing and demultiplexing&#xff08;多路复用和多路分解&#xff09;3.2 Connectionless transport&#xff1a;UDP3.3 Principles of reliable data transfer3.4 Pipelined communication3.5 TCP: con…...

HashMap

一、什么是 基于哈希表的数据结构允许以O(1)的时间复杂度进行元素的插入&#xff0c;查询和删除 二、底层结构 1.数据结构 在1.8以后&#xff0c;数组链表红黑树 数组&#xff1a;HashMap底层是一个数组&#xff0c;每个数组元素存放一个链表或红黑树&#xff08;在JDK 1.…...

JavaScript甘特图 dhtmlx-gantt

背景 需求是在后台中&#xff0c;需要用甘特图去展示管理任务相关视图&#xff0c;并且不用依赖vue&#xff0c;兼容JavaScript原生开发。最终使用dhtmlx-gantt&#xff0c;一个半开源的库&#xff0c;基础功能免费&#xff0c;更多功能付费。 甘特图需求如图&#xff1a; 调…...

基于无线传感器网络的无线光照强度采集系统(附详细使用教程+完整代码+原理图+完整课设报告)

&#x1f38a;项目专栏&#xff1a;【Zigbee课程设计系列文章】&#xff08;附详细使用教程完整代码原理图完整课设报告&#xff09; 前言 &#x1f451;由于无线传感器网络&#xff08;也即是Zigbee&#xff09;作为&#x1f310;物联网工程的一门必修专业课&#xff0c;具有…...

单元测试中创建多个线程测试 ThreadLocal

单元测试中创建多个线程测试 ThreadLocal 在单元测试中&#xff0c;可以通过以下方式创建多个线程来测试 ThreadLocal 的行为。 目标 验证 ThreadLocal 在多线程环境下是否能正确隔离每个线程的数据。 实现步骤 定义需要测试的类 包含 ThreadLocal 对象的类&#xff0c;提供…...

【 Sonarqube】可视化Java项目单元测试覆盖率统计框架搭建

一、项目背景&#xff1a; 一个小公司的朋友反应他们那边Java项目单元测试有&#xff0c;但还没有可视化统计覆盖率数据&#xff0c;没法统计就不能直观的看到单测的覆盖率&#xff0c;Java的覆盖率统计框架还是比较成熟&#xff0c;部署起来也不是很难&#xff0c;下面我们逐…...

安装CentOS(新手教程超详细)

安装CentOS 1. 安装虚拟机 1.1下载虚拟机软件 VMware(VMware by Broadcom - Cloud Computing for the Enterprise) 我们使用的是VMware Workstation VirtualBox(Downloads – Oracle VirtualBox) 如果使用的是Windows系统&#xff0c;下载带for Windows hosts的版本 1.2…...

一起来看--红黑树

【欢迎关注编码小哥&#xff0c;学习更多实用的编程方法和技巧】 红黑树是一种自平衡的二叉搜索树&#xff0c;广泛应用于计算机科学中&#xff0c;尤其是在实现关联数组和集合时。它的设计旨在确保在最坏情况下&#xff0c;基本动态集合操作&#xff08;如插入、删除和查找&am…...

【Hackthebox 中英 Write-Up】通过 POST 请求绕过前端限制:基于 Cookie 的认证与数据提取实操指南

Bypassing Frontend Restrictions with POST Requests: A Practical Guide to Cookie-Based Authentication and Data Extraction 通过 POST 请求绕过前端限制 Objective | 目标 The purpose of this exercise is to understand how POST requests work and how to authentica…...

comctl32.dll没有被指定在window运行怎么解决?

一、文件丢失问题&#xff1a;comctl32.dll没有被指定在Windows上运行怎么解决&#xff1f; comctl32.dll是Windows操作系统中的一个重要组件&#xff0c;它负责提供用户界面元素&#xff0c;如按钮、对话框和列表视图等。当系统提示“comctl32.dll没有被指定在Windows上运行”…...

EC-Final 2024游记

长篇流水账预警 Day -&#xff1f; 某天上乒乓课时看到懋神群里了我们队问有时间打ec吗&#xff0c;才知道我们最终还是进ec了&#xff0c;也成为了我们学校唯一一支没有金牌的ec队伍&#xff0c;然而此时整个队伍板子都扔了&#xff0c;一个多月没做过题&#xff0c;我脑子就…...

我的Opencv

1.安装Opencv pip install opencv-python 2.读取图像 3.写图像 4. 显示图像 5.waitKey() 6.读视频并播放视频 7.写视频 8. 获取摄像头视频 9.色彩转换 # BGR to GRAY imgGRAY cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # BGR to RGB imgRGB cv2.cvtColor(img, cv2.COLOR_…...

Pandas-缺失数据处理

文章目录 一. 简介1. 缺失数据简介2. NaN简介① 查看NaN&#xff0c;NAN&#xff0c;nan② 两个NaN也不相等③ isnull/isna方法④ notnull/notna 二. 加载缺失值1. 来源2. 加载数据&#xff0c;不包含默认缺失值3.加载数据&#xff0c;手动指定缺失值 三.处理缺失值1. 加载数据…...

windows编译llama.cpp GPU版本

Build 指南 https://github.com/ggerganov/llama.cpp/blob/master/docs/build.md 一、Prerequire 具体步骤&#xff08;以及遇到的坑&#xff09;&#xff1a; 如果你要使用CUDA&#xff0c;请确保已安装。 1.安装 最新的 cmake, git, anaconda&#xff0c; pip 配置pyt…...