机器学习西瓜书笔记(十三) 第十三章半监督学习+代码

第十三章

  • 13 半监督学习
    • 13.1 未标记样本
      • 13.3.1 小结
    • 13.2 生成式方法
      • 13.2.1 小结
    • 13.3 半监督SVM
      • 13.3.1 小结
    • 13.4 图半监督学习
      • 13.4.1 小结
    • 13.5 基于分歧的方法
      • 13.5.1 小结
    • 13.6 半监督聚类
      • 13.6.1 小结
    • 13.7 代码:手写数据集上的标签传播-性能展示
    • 章末小结

13 半监督学习

13.1 未标记样本

在这里插入图片描述

13.3.1 小结

未标记样本在机器学习中指的是缺乏标签信息的数据,尽管它们不如标记样本直接有助于模型训练,但它们在数量上往往更为丰富,包含了关于数据分布的重要信息。为了利用这些未标记样本,研究者们开发了多种方法,包括主动学习、半监督学习、直推学习、生成式方法、半监督支持向量机、基于分歧的方法以及半监督聚类等。这些方法通过不同的策略来挖掘未标记数据的潜力,如主动学习通过选择性地获取样本标签来优化模型,半监督学习则直接结合少量标记样本和大量未标记样本进行训练,而基于分歧的方法则利用多个学习器之间的差异来提升性能。通过这些技术,我们能够在有限的标记数据条件下训练出性能更强的模型。

13.2 生成式方法

在这里插入图片描述

13.2.1 小结

生成式方法是一种半监督学习方法,它基于一个核心假设:所有数据(无论标记与否)都是由同一个潜在模型生成的。这意味着模型可以通过学习有标记数据来推测出未标记数据的标签。生成式方法通常先对联合概率分布P(x, c)进行建模,然后使用这个模型来推断条件概率P(c | x)。这些方法依赖于对潜在数据分布的准确假设,因此需要有较强的领域知识来确保假设的分布与真实分布相吻合。如果假设不准确,使用未标记样本可能会降低学习器的泛化性能。

在实践中,生成式方法可以通过极大似然估计和EM算法等技术来实现。例如,如果假设数据由高斯混合模型生成,那么可以通过EM算法来估计模型参数,包括未标记数据的标签。这种方法在参数迭代更新收敛后,可以计算出待预测样本属于每个类簇的后验概率,并选择概率最大的类簇作为预测结果 。

然而,生成式方法的性能很大程度上取决于潜在模型选择的准确性。如果选择的模型不能很好地反映数据的真实分布,那么包含未标记样本的学习过程可能会受到负面影响。因此,这类方法在实际应用中需要谨慎选择模型,并可能需要大量的领域知识来指导这一过程。

13.3 半监督SVM

在这里插入图片描述

13.3.1 小结

半监督支持向量机(S3VM)是一种在支持向量机基础上发展起来的算法,它结合了少量的标记样本和大量的未标记样本来提升分类性能。S3VM的目标是在数据的低密度区域寻找决策边界,以此同时优化有标签和未标记样本的分类效果。相比于传统的SVM,S3VM能够更有效地利用未标记数据来提高模型的泛化能力,尤其适用于标记数据稀缺的场景。尽管这种方法可能会增加过拟合的风险,但适当的参数调整可以确保模型具有良好的预测性能。S3VM及其变体在自然语言处理、计算机视觉和生物信息学等多个领域都有广泛的应用。

13.4 图半监督学习

在这里插入图片描述

13.4.1 小结

图半监督学习是一种利用数据点间关系构建图结构,并通过标签传播来预测未标记样本标签的机器学习方法。在这种框架下,每个数据点成为图中的一个节点,节点间的边反映了数据点间的相似性。该方法能够有效地利用少量标记样本的信息来指导大量未标记样本的学习过程,从而提高学习性能,特别适用于标记数据稀缺的实际应用场景,如社交网络分析和生物信息学。通过图结构,算法能够捕捉数据的内在结构,实现更准确的标签预测,并提升模型的泛化能力。

13.5 基于分歧的方法

与生成式方法、半监督SVM、图半监督学习等基于单学习器利用未标记数据不同,基于分歧的方法使用多学习器,而学习器之间的"分歧"对未标记数据的利用至关重要。

"协同训练"是此类方法的重要代表,它最初是针对"多视图"数据设计的,因此也被看作"多视图学习"的代表。在介绍协同训练之前,先看看什么是多视图数据。

在不少现实应用中,一个数据对象往往同时拥有多个"属性集",每个属性集就构成了一个"视图"。例如对一部电影来说,它拥有多个属性集:图像画面信息所对应的属性集、声音信息所对应的属性集、字幕信息所对应的属性集、甚至网上的宣传讨论所对应的属性集等。每个属性集都可看作一个视图。为简化讨论,暂且仅考虑图像画面属性集所构成的视图和声音属性集所构成的视图。于是,一个电影片段可表示为样本 ( < x 1 , x 2 > , y ) (<x^1,x^2>,y) (<x1,x2>,y),其中 x i x^i xi是样本在视图i中的示例,即基于该视图属性描述而得的属性向量,不妨假定 x 1 x^1 x1为图像视图中的属性向量, x 2 x^2 x2为声音视图中的属性向量;y是标记,假定是电影的类型例如"动作片"、"爱情片"等。 ( < x 1 , x 2 > , y ) (<x^1,x^2>,y) (<x1,x2>,y)这样的数据就是多视图数据。

假设不同视图具有"相容性",即其所包含的关于输出空间y的信息是一致的:令 y 1 y^1 y1表示从图像画面信息判别的标记空间, y 2 y^2 y2表示从声音信息判别的标记空间,则有 y = y 1 = y 2 y=y^1=y^2 y=y1=y2,例如两者都是{爱情片,动作片},而不能是 y 1 y^1 y1={爱情片,动作片},而$y^2={文艺片,惊悚片}。在此假设下,显式地考虑多视图有很多好处。仍以电影为例,某个片段上有两人对视,仅凭图像画面信息难以分辨其类型。但此时若从声音信息听到"我爱你",则可判断出该片段很可能属于"爱情片";另一方面,若仅凭图像画面信息认为"可能是动作片",仅凭声音信息也认为"可能是动作片",则当两者一起考虑时就有很大的把握判别为"动作片"。显然,在"相容性"基础上,不同视图信息的"互补性"会给学习器的构建带来很多便利。

协同训练正是很好地利用了多视图的"相容互补性"。假设数据拥有两个充分且条件独立视图,"充分"是指每个视图都包含足以产生最优学习器的信息,"条件独立"则是指在给定类别标记条件下两个视图独立。在此情形下,可用一个简单的办法来利用未标记数据:首先在每个视图上基于有标记样本分别训练出一个分类器,然后让每个分类器分别去挑选自己"最有把握的"未标记样本赋予伪标记,并将伪标记样本提供给另一个分类器作为新增的有标记样本用于训练更新……这个"互相学习、共同进步"的过程不断迭代进行,直到两个分类器都不再发生变化,或达到预先设定的迭代轮数为止。算法描述如图所示。若在每轮学习中都考察分类器在所有未标记样本上的分类置信度,会有很大的计算开销,因此在算法中使用了未标记样本缓冲池。分类置信度的估计则因基学习算法而异例如若使用朴素贝叶斯分类器,则可将后验概率转化为分类置信度;若使用支持向量机,则可将间隔大小转化为分类置信度。
在这里插入图片描述

协同训练过程虽简单,但令人惊讶的是,理论证明显示出,若两个视图充分且条件独立,则可利用未标记样本通过协同训练将弱分类器的泛化性能提升到任意高。不过,视图的条件独立性在现实任务中通常很难满足,因此性能提升幅度不会那么大,但研究表明,即便在更弱的条件下,协同训练仍可有效地提升弱分类器的性能。协同训练算法本身是为多视图数据而设计的,但此后出现了一些能在单视图数据上使用的变体算法,它们或是使用不同的学习算法,或使用不同的数据采样,甚至使用不同的参数设置来产生不同的学习器,也能有效地利用未标记数据来提升性能。后续理论研究发现,此类算法事实上无需数据拥有多视图仅需弱学习器之间具有显著的分歧(或差异),即可通过相互提供伪标记样本的方式来提升泛化性能;不同视图、不同算法、不同数据采样、不同参数设置等,都仅是产生差异的渠道面非必备条件。

基于分歧的方法只需采用合适的基学习器,就能较少受到模型假设、损失函数非凸性和数据规模问题的影响,学习方法简单有效、理论基础相对坚实、适用范围较为广泛。为了使用此类方法,而能生成具有显著分歧、性能尚可的多个学习器,但当有标记样本很少,尤其是数据不具有多视图时,要做到这一点并不容易,需有巧妙的设计。

13.5.1 小结

基于分歧的方法是半监督学习中的一种重要技术,它通过构建多个分类器(或称为学习器)并利用它们之间的分歧来利用未标记数据。这种方法的核心思想是,不同分类器对未标记样本的预测结果如果有较大分歧,那么这些样本很可能是进行进一步学习的关键。例如,在协同训练(Co-training)中,两个分类器各自在不同的视图上进行训练,并且相互利用对方的预测结果来提升自身的学习性能。此外,三体训练(Tri-training)是另一种基于分歧的方法,它使用三个分类器来处理单视图数据,通过“少数服从多数”的原则来决定如何利用未标记样本。这些方法在有标记样本较少时特别有用,因为它们能够有效地利用大量未标记的数据来提升模型的泛化能力。

13.6 半监督聚类

在这里插入图片描述

13.6.1 小结

半监督聚类是一种机器学习方法,通过结合少量的标记数据和大量的未标记数据来提升聚类任务的性能。它利用已知的标记信息,如类别标签或成对约束,来引导和优化聚类过程,从而使得聚类结果更加精确。这种方法在处理标记数据不足的实际问题时特别有用,已经广泛应用于生物信息学、图像处理、文本挖掘等多个领域。常见的半监督聚类算法包括基于约束的方法、基于距离的方法、基于图的方法和基于模型的方法等,它们通过不同的技术手段整合监督信息,以提高聚类的准确性和效率。随着研究的不断深入,半监督聚类算法在理论和实践上都在持续进步,展现出在大数据时代处理复杂聚类任务的重要价值。

13.7 代码:手写数据集上的标签传播-性能展示

本示例通过训练标签扩展模型来用很少的标签集对手写数字进行分类,展示了半监督学习的能力。

手写数字数据集共有1797个点。 该模型将使用所有点进行训练,但仅会标记30个点。 以混淆矩阵和一系列关于每个类的度量的形式的结果将是非常好的。

最后,将显示前10个最不确定的预测。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from sklearn import datasets
from sklearn.semi_supervised import LabelSpreading
from sklearn.metrics import confusion_matrix, classification_reportdigits = datasets.load_digits()
rng = np.random.RandomState(2)
indices = np.arange(len(digits.data))
rng.shuffle(indices)X = digits.data[indices[:340]]
y = digits.target[indices[:340]]
images = digits.images[indices[:340]]n_total_samples = len(y)
n_labeled_points = 40indices = np.arange(n_total_samples)unlabeled_set = indices[n_labeled_points:]#############################################################################
每一轮都打乱顺序
y_train = np.copy(y)
y_train[unlabeled_set] = -1#############################################################################
通过LabelSpreading进行学习
lp_model = LabelSpreading(gamma=.25, max_iter=20)
lp_model.fit(X, y_train)
predicted_labels = lp_model.transduction_[unlabeled_set]
true_labels = y[unlabeled_set]cm = confusion_matrix(true_labels, predicted_labels, labels=lp_model.classes_)print("Label Spreading model: %d labeled & %d unlabeled points (%d total)" %(n_labeled_points, n_total_samples - n_labeled_points, n_total_samples))print(classification_report(true_labels, predicted_labels))print("Confusion matrix")
print(cm)#############################################################################
计算每个转换分布的不确定性值
pred_entropies = stats.distributions.entropy(lp_model.label_distributions_.T)#############################################################################
选择十大最不确定的标签
uncertainty_index = np.argsort(pred_entropies)[-10:]#############################################################################
绘图
f = plt.figure(figsize=(7, 5))
for index, image_index in enumerate(uncertainty_index):image = images[image_index]sub = f.add_subplot(2, 5, index + 1)sub.imshow(image, cmap=plt.cm.gray_r)plt.xticks([])plt.yticks([])sub.set_title('predict: %i\ntrue: %i' % (lp_model.transduction_[image_index], y[image_index]))f.suptitle('Learning with small amount of labeled data')

在这里插入图片描述

在这里插入图片描述

章末小结

这段文本提供了半监督学习领域的一个全面概述,包括未标记样本的重要性、生成式方法、半监督支持向量机(S3VM)、图半监督学习、基于分歧的方法以及半监督聚类等不同的半监督学习方法。此外,还提供了一个使用标签传播算法对手写数字数据集进行分类的Python代码示例。

  1. 未标记样本:介绍了未标记样本在机器学习中的作用和利用方法,如主动学习、半监督学习等。

  2. 生成式方法:讨论了基于数据由同一潜在模型生成的假设,通过极大似然估计和EM算法等技术实现。

  3. 半监督SVM:介绍了S3VM如何结合少量标记样本和大量未标记样本来提升分类性能。

  4. 图半监督学习:利用数据点间关系构建图结构,并通过标签传播来预测未标记样本标签。

  5. 基于分歧的方法:使用多个学习器之间的分歧来利用未标记数据,如协同训练和三体训练。

  6. 半监督聚类:通过结合少量的标记数据和大量的未标记数据来提升聚类任务的性能。

  7. 代码示例:提供了一个使用标签传播算法对手写数字数据集进行分类的Python代码示例,展示了半监督学习的能力。

代码解析:

  • 数据集:使用sklearn.datasets.load_digits()加载手写数字数据集。
  • 数据预处理:随机打乱数据顺序,将部分数据标记为未标记(-1)。
  • 模型训练:使用LabelSpreading模型进行训练。
  • 性能评估:通过混淆矩阵和分类报告评估模型性能。
  • 不确定性计算:计算每个样本的预测不确定性。
  • 结果展示:展示预测不确定性最高的前10个样本。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——初识树和二叉树

线性结构是一对一的关系&#xff0c;意思就是只有唯一的前驱和唯一的后继&#xff1b; 非线性结构&#xff0c;如树形结构&#xff0c;它可以有多个后继&#xff0c;但只有一个前驱&#xff1b;图形结构&#xff0c;它可以有多个前驱&#xff0c;也可以有多个后继。 树的定义…

变电站红外检测数据集 1180张 变电站红外 标注voc yolo 13类

变电站红外检测数据集 1180张 变电站红外 标注voc yolo 13类 变电站红外检测数据集 名称 变电站红外检测数据集 (Substation Infrared Detection Dataset) 规模 图像数量&#xff1a;1185张图像。类别&#xff1a;13种设备类型。标注个数&#xff1a;2813个标注。 数据划分…

多模态RAG实现

在标准 RAG 中&#xff0c;输入文档包含文本数据。LLM 利用上下文学习&#xff0c;通过检索与所提查询上下文相匹配的文本文档块来提供更相关、更准确的答案。 但是&#xff0c;如果文档包含图像、表格、图表等以及文本数据&#xff0c;该怎么办&#xff1f; 不同的文档格式包…

华为GaussDB数据库之Yukon安装与使用

一、Yukon简介 Yukon&#xff08;禹贡&#xff09;&#xff0c;基于openGauss、PostgreSQL、GaussDB数据库扩展地理空间数据的存储和管理能力&#xff0c;提供专业的GIS&#xff08;Geographic Information System&#xff09;功能&#xff0c;赋能传统关系型数据库。 Yukon 支…

linux桌面软件(wps)内嵌到其他窗口

程序测试环境是&#xff1a;slackware系统&#xff0c;属于linux系统&#xff0c;有桌面&#xff08;Xface Session&#xff09;。系统镜像是&#xff1a;slackware64-15.0-install-dvd.iso。qt、c代码实现。 程序功能&#xff1a;将已经打开的wps&#xff08;word、pdf等都可…

Android SystemUI组件(09)唤醒亮屏 锁屏处理流程

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分 唤醒亮屏 即可。 Power按键的处理逻辑最终是由PhoneWindowManager来…

Watchdog Timers(WDT)

文章目录 1. 介绍2. Feature List3. 概述3.1. Safety Watchdog3.2. CPU Watchdog 4. 看门狗定时器功能5. Endinit Functions5.1 Password Access to WDTxCON05.1.1 Static Password5.1.2 Automatic Password Sequencing 5.2 Check Access to WDTxCON05.3 Modify Access to WDTx…

[C++]使用C++部署yolov11目标检测的tensorrt模型支持图片视频推理windows测试通过

官方框架&#xff1a; https://github.com/ultralytics/ultralytics yolov8官方最近推出yolov11框架&#xff0c;标志着目标检测又多了一个检测利器&#xff0c;于是尝试在windows下部署yolov11的tensorrt模型&#xff0c;并最终成功。 重要说明&#xff1a;安装环境视为最基…

Tiny-universe手戳大模型TinyRAG--task4

TinyRAG 这个模型是基于RAG的一个简化版本&#xff0c;我们称之为Tiny-RAG。Tiny-RAG是一个基于RAG的简化版本&#xff0c;它只包含了RAG的核心功能&#xff0c;即Retrieval和Generation。Tiny-RAG的目的是为了帮助大家更好的理解RAG模型的原理和实现。 1. RAG 介绍 LLM会产…

Halcon基础系列1-基础算子

1 窗口介绍 打开Halcon 的主界面主要有图形窗口、算子窗口、变量窗口和程序窗口&#xff0c;可拖动调整位置&#xff0c;关闭后可在窗口下拉选项中找到。 2 显示操作 关闭-dev_close_window() 打开-dev_open_window (0, 0, 712, 512, black, WindowHandle) 显示-dev_display(…

超级干货:Air780E之RS485通信篇,你学会了吗?

今天&#xff0c;我们来学习低功耗4G模组Air780E的RS485通信&#xff0c;同学们&#xff0c;你学习了吗&#xff1f; 一、RS485简介 物联网&#xff08;IoT&#xff09;在工业场景中的应用越来越广泛&#xff0c;而RS485是一种常见的通信协议&#xff0c;广泛应用于工业自动…

快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例

本文作者&#xff1a;胡玉龙&#xff0c;快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年&#xff0c;快手的数据量已突破800TB大关&#xff0c;其中最大集群的数据量更是达到了数百TB级别。为此&#xff0c;快手将数据…

关于视频监控介入的部分内容,使用的是海康H5web播放的模式

这是原发直接能在系统中使用。里面的样式自己修改&#xff0c;主要是在引入时出现黑色的框就是引入成功&#xff0c;需要在public文件夹中引入h5player.min.js文件就可以。 <template><div class"Shiping"><el-container><el-header><di…

【数据分享】2001-2023年我国省市县镇四级的逐月平均气温数据(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月平均气温栅格数据&#xff0c;该数据来源于国家青藏高原科学数据中心。为方便大家使用&#xff0c;我们还基于上述平均气温栅格数据将数据处理为Shp和Excel格式的省市县三级逐月平均气温数据&#xff08;可查看之前的文章获悉详情&#…

ubuntu 18.04 cuda 11.01 gpgpu-sim 裸机编译

1&#xff0c;环境 ubuntu 18.04 x86_64 cuda 11.01 gpgpu-sim master commit 90ec3399763d7c8512cfe7dc193473086c38ca38 2&#xff0c;预备环境 一个比较新的 ubuntu 18.04&#xff0c;为了迎合 cuda 11.01 的版本需求 安装如下软件&#xff1a; sudo apt-get instal…

【Linux】几种常见配置文件介绍

配置文件目录 linux 系统中有很多配置文件目录 /etc/systemd/system /lib/systemd/system /usr/lib/systemd/system 【结果就是这个目录配置文件是源头】 这三者有什么样的关系呢&#xff1f; 以下是网络上找的资料汇总&#xff0c;并加了一些操作验证。方便后期使用 介…

VMware中Ubuntu系统Docker正常运行但网络不通(已解决)

问题描述&#xff1a;在VMware中的Ubuntu系统下部署了Docker&#xff0c;当在docker容器中运行Eureka微服务时&#xff0c;发现Eureka启动正常&#xff0c;但无法通过网页访问该容器中Eureka。 解决办法如下&#xff1a; 1、创建桥接网络&#xff1a;test-net sudo docker n…

ARM 架构、cpu

一、ARM的架构 ARM是一种基于精简指令集&#xff08;RISC&#xff09;的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点&#xff1a; 精简指令集&#xff1a;ARM芯片使用精简指令集&#xff0c;即每条指令只完成一项简单的操作&#xff0c;从而提高指令的执行效率…

进程的创建、多任务及退出

一、创建进程 1、并发与并行 为了提高计算机执行任务的效率&#xff0c;一般采用的解决方案就是能够让多个任务同时进行&#xff0c;可以使用 并发 与 并行两种方式 并行 : 在 cpu 多核的支持下&#xff0c;实现物理上的同时执行 并发 : 在有限的 cpu 核芯的情况下 , …

60 序列到序列学习(seq2seq)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录一、理论知识比喻机器翻译Seq2seq编码器-解码器细节训练衡量生成序列的好坏的BLEU(值越大越好)总结 二、代码编码器解码器损失函数训练预测预测序列的评估小结练习 一、理论知识 比喻 seq2seq就像RNN的转录工作一样&#xff0c;非常形象的比…