【机器学习】机器学习的基本分类-半监督学习(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.9
    X_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


总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

西门子200smart实现TCP服务器源码分享

1、创建TCP服务器 2、服务器故障复位 3、TCP发送数据 4、TCP接收数据

攻防世界web第二题unseping

这是题目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("ping"))) {cal…

Java如何避免过度打印日志导致性能问题

文章目录 Java如何避免过度打印日志导致性能问题前言日常开发如何打印日志1、优化日志结构&#xff08;1&#xff09;不要打印一些没用的日志&#xff0c;也不要在 for 循环里面去打印&#xff08;2&#xff09;不要做字符串的拼接&#xff0c;多用占位符&#xff08;3&#xf…

sentinel笔记9- 限流规则持久化(上)

之前的在sentinel 控制台配置的规则&#xff0c;重启后就消失了&#xff0c;sentinel 限流保护-笔记-CSDN博客 本篇还是在之前的demo做验证&#xff0c;使用nacos做持久化。 规则集成Nacos 1 引入依赖 <!--nacos-discovery 注册中心依赖--><dependency><gr…

服务器数据恢复—Lustre分布式文件系统下服务器节点进水的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 5台节点服务器&#xff0c;每台节点服务器上有一组RAID5阵列。每组RAID5阵列上有6块硬盘&#xff08;其中1块硬盘设置为热备盘&#xff0c;其他5块硬盘为数据盘&#xff09;。上层系统环境为Lustre分布式文件系统。 机房天花板漏水导致…

Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit

可以搭建属于公司内部或者个人的Git服务器&#xff0c;方便程序代码及文档版本管理。 官网&#xff1a;http://www.gitblit.com/ Windows环境下安装 提前已经安装好了JDK。 官网下载Windows版的GitBlit。 将zip包解压到自己想要放置的文件夹下。 建立版本库路径&#xff0c…

《2023-2024网络安全产业发展核心洞察与趋势预测》

2023年至2024年间&#xff0c;我国经济总体上逐步显现出复苏迹象&#xff0c;并开始释放向上增长的潜力。在此背景下&#xff0c;网络安全产业也经历了经济环境的深刻影响&#xff0c;不仅实现了阶段性的稳定发展&#xff0c;也展现出较强的韧性与适应能力&#xff0c;为未来的…

WebRTC服务质量(08)- 重传机制(05) RTX机制

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…

Kibana8.17.0在mac上的安装

1、Kibana是什么 Kibana是与elasticsearch配套使用的数据分析与可视化工具&#xff0c;通过Kibana可以轻松与es中存储的数据进行高效的交互&#xff0c;包括数据写入、检索、删除等操作&#xff0c;并可以通过编写部分代码将数据做成各种报表&#xff0c;从而进行非常直观的统…

【Linux】:线程安全 + 死锁问题

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 1. 线程安全和重入问题&…

AI应用-本地模型实现AI生成PPT(简易版)

文章目录 前言技术栈效果展示 一、实现思路二、实现步骤1.本地安装marp-cli2.后端实现3.前端实现 三、代码地址及说明 前言 在许多项目中&#xff0c;生成 PPT 是常见的需求&#xff0c;尤其在教育和报告展示中。传统的生成 PPT 的方法需要手动创建&#xff0c;而使用生成模型…

Linux 服务管理 service systemd systemctl

Linux 服务管理 service systemd systemctl 1 介绍1.1 概述1.2 发展历程1.3 特点1.4 linux 服务管理 发展历程Ubuntu 14.04及更早版本&#xff1a;使用upstart作为默认的init系统旧版本新版本 Ubuntu 15.04到16.04版本&#xff1a;默认使用systemd作为init系统&#xff0c;但仍…

vue 基础学习

一、ref 和reactive 区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div id"app"><h1>{{Web.title}}</h1><h1&…

光谱相机在农业中的具体应用案例

作物生长监测与产量预测 美国爱荷华州玉米种植园&#xff1a;农场主使用无人机搭载高光谱相机&#xff0c;定期对玉米田进行拍摄。通过分析光谱数据&#xff0c;获取玉米的叶面积指数、叶绿素含量等生长参数。在玉米生长关键期&#xff0c;依据这些参数及时调整施肥和灌溉方案…

LSTM-SVM时序预测 | Matlab基于LSTM-SVM基于长短期记忆神经网络-支持向量机时间序列预测

LSTM-SVM时序预测 | Matlab基于LSTM-SVM基于长短期记忆神经网络-支持向量机时间序列预测 目录 LSTM-SVM时序预测 | Matlab基于LSTM-SVM基于长短期记忆神经网络-支持向量机时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.LSTM-SVM时序预测 | Matlab基于LSTM…

05.HTTPS的实现原理-HTTPS的握手流程(TLS1.2)

05.HTTPS的实现原理-HTTPS的握手流程&#xff08;TLS1.2&#xff09; 简介1. TLS握手过程概述2. TLS握手过程细化3. 主密钥&#xff08;对称密钥&#xff09;生成过程4. 密码规范变更 简介 主要讲述了混合加密流程完成后&#xff0c;客户端和服务器如何共同获得相同的对称密钥…

PostgreSQL编译安装教程

下载安装 1.在家目录创建一个文件夹放下载安装包 mkdir softwarecd software 2.下载文件压缩包 wget https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.gz 3.解压 tar -xzvf postgresql-16.0.tar.gz 4.编译 在software/postgresql-16.0下 cd software…

009-spring-bean的实例化流程

1 spring容器初始化时&#xff0c;将xml配置的bean 信息封装在 beandefinition对象 2 所有的beandefinition存储在 beandefinitionMap的map集合中 3 spring对map进行遍历&#xff0c;使用反射创建bean实例对象 4 创建好的bean存在名为singletonObjects的map集合中 5 调用ge…

定位方式:css

使用相对路径 div ul #div下的所有ul&#xff0c;空格表示相对路径&#xff08;这个实际中用的多一些&#xff09; 绝对路径-一般不用绝对路径 html>head>div&#xff0c;“>”表示根路径 使用class名称定位 使用.表示 使用id定位 使用#表示 使用属性定位 [属性名…

基于深度学习(HyperLPR3框架)的中文车牌识别系统-搭建开发环境

本篇内容为搭建开发环境。包括&#xff1a;python开发环境&#xff0c;Qt/C开发环境&#xff0c;以及用到的各个库的安装和配置。 一、Python开发环境搭建与配置 1、下载并安装Anaconda 我没有用最新的版本&#xff0c;安装的是 Anaconda3-2021.05-Windows-x86_64.exe&#…