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

server/2025/1/1 17:42:13/

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


半监督学习的特点

  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


总结

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


http://www.ppmy.cn/server/154316.html

相关文章

【探花交友】day03—MongoDB基础

目录 课程介绍 1、通用设置 1.1 需求分析 1.2 查询通用设置 1.2 陌生人问题 1.3 通知设置 1.4 黑名单管理 2、MongoDB简介 1.1、MongoDB简介 1.2、MongoDB的特点 1.3 数据类型 3、MongoDB入门 2.1、数据库以及表的操作 2.2、新增数据 2.3、更新数据 2.4、删除数…

uniapp中uni.scss如何引入页面内或生效

介绍 uniapp中uni.scss不需要引用自动会生效,前提是安装了scss. 解决方法 在 UniApp 项目中,如果需要在页面的 SCSS 中使用 uni.scss 定义的变量,需要确保全局变量文件 uni.scss 被正确加载。 步骤: 1. 确保变量定义正确 首先…

Spring5.1.3 @Autorwired注解原理重新回顾

直接用一些例子代码说明Autorwired的工作原理,Spring版本为5.1.3 。 一般认为Autorwired是自动注入的,但实际不是,和byName, byType等自动注入没有任何关系。 Ca & Cb & Cc 三个类 Ca public class Ca {public Ca(){System.out.p…

ubuntu NVIDIA RTX4000 双屏显示不了

运维Linux服务器,我们正常需要安装服务器版操作系统,服务器操作系统默认是最小化安装,不带图形化桌面和开发库环境等。 一:安装说明: 1.系统版本:ubuntu-20.04.4-live-server-amd64 2.网络环境&#xff…

Redis——数据过期策略

文章目录 1. 引入2. 数据过期策略2.1 策略一:惰性删除2.1.1 原理2.1.2 优点2.1.3 缺点 2.2 策略二:定期删除2.2.1 原理2.2.2 模式2.2.3 优点2.2.4 缺点 2.3 两种策略的比较 3. 总结 1. 引入 Redis 是一个 高性能 的非关系型数据库,由于 Redi…

springboot508基于Springboot宠物商城网站系统(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统宠物商城网站系统信息管理难度大,容错率低&am…

大数据技术-Hadoop(二)HDFS的介绍与使用

目录 1、HDFS简介 1.1 什么是HDFS 1.2 HDFS的优点 1.3、HDFS的架构 1.3.1、 NameNode 1.3.2、 NameNode的职责 1.3.3、DataNode 1.3.4、 DataNode的职责 1.3.5、Secondary NameNode 1.3.6、Secondary NameNode的职责 2、HDFS的工作原理 2.1、文件存储 2.2 、数据写…

Mono里运行C#脚本9—do_mono_image_open

Mono里运行C#脚本9—do_mono_image_open 前面介绍怎么样打开文件,并保存文件到HASH表里, 现在再进一步来处理加载的EXE文件。 因为调用mono_image_storage_open 函数是在do_mono_image_open函数完成的,因此我们来分析do_mono_image_open函数。 static MonoImage * do_mo…