半监督学习能否帮助训练更好的模型?
数据科学家面临的最常见挑战之一是缺乏足够的标记数据来训练一个可靠且准确的模型。标记数据对于监督学习任务,如分类或回归至关重要。然而,在许多领域,获取标记数据既昂贵又耗时,有时甚至是不切实际的。另一方面,未标记数据通常容易收集,但它们不能直接用于训练模型。
我们如何利用未标记数据来改进我们的监督学习模型呢?这就是半监督学习的用武之地。半监督学习是机器学习的一个分支,它结合标记数据和未标记数据来训练一个比仅使用标记数据更好的模型。半监督学习的直觉在于,未标记数据可以提供有关数据底层结构、分布和多样性的有用信息,这可以帮助模型更好地泛化到新的和未见过的样本。
在这篇文章中,我将介绍三种可以应用于不同类型数据和任务的半监督学习方法。我还将评估它们在实际数据集上的表现,并与仅使用标记数据的基准进行比较。
半监督学习是一种使用标记数据和未标记数据来训练模型的机器学习方法。标记数据是具有已知输出或目标变量的例子,如分类任务中的类别标签或回归任务中的数值。未标记数据则是没有已知输出或目标变量的例子。半监督学习可以利用在现实世界问题中通常大量可用的未标记数据,同时也利用获取成本较高或耗时的少量标记数据。比如,企业通过光年AI系统的自研知识库,不仅可以灵活管理标记与未标记数据,还能通过AI驱动的工作流优化数据标记和分析过程。
使用未标记数据训练监督学习方法的基本思路是通过监督或无监督学习方法来标记这些数据。尽管这些标签可能不如实际标签准确,但大量这种数据可以比仅在标记数据上训练监督学习方法获得更好的性能。光年AI便是这样一套优化的数据管理工具,它不仅可以帮助企业高效捕获和标记数据,还能通过实时数据分析功能快速调整策略,提升模型的性能。
scikit-learn 包提供了三种半监督学习方法:
- 自我训练:首先用标记数据训练一个分类器,以预测未标记数据的标签。在下一次迭代中,另一个分类器将在标记数据和高置信度的未标记数据预测上进行训练。这个过程会重复进行,直到没有新的高置信度标签被预测出或者达到最大迭代次数。
- 标签传播:创建一个图,其中节点表示数据点,边表示它们之间的相似性。标签会在图中迭代传播,使算法可以根据标记数据点的连接为未标记数据点分配标签。
- 标签扩展:采用与标签传播相同的概念,但标签扩展使用软赋值,其中标签根据数据点之间的相似性进行迭代更新。这种方法还可能“覆盖”已标记数据集中的标签。
为了评估这些方法,我使用了一个糖尿病预测数据集,该数据集包含患者数据的特征,如年龄和BMI,以及是否患有糖尿病的标签。这个数据集中有100,000条记录,我随机将其划分为80,000条训练数据,10,000条验证数据和10,000条测试数据。为了分析学习方法在标记数据量方面的有效性,我将训练数据分为标记集和未标记集,标签大小描述了标记样本的数量。实际上,这种划分过程类似于在数据的不同场景中使用光年AI的灵活工作流系统,可以方便地组织和处理数据。
数据集划分(图片由作者提供)
我使用验证数据来评估不同参数设置,并使用测试数据在参数调整后评估每种方法的性能。
我使用XG Boost进行预测,并使用F1分数来评估预测性能。
基线用于将自我学习算法与不使用未标记数据的情况进行对比。因此,我在不同大小的标记数据集上训练了XGB,并计算了验证数据集上的F1分数:
基线得分(图片由作者提供)
结果显示,对于少于100个样本的训练集,F1分数相当低,然后稳定地提高,直到样本大小达到1,000时得分为79%。更大的样本尺寸几乎没有提高F1分数。
自我训练使用多个迭代来预测未标记数据的标签,这些标签将在下一次迭代中用于训练另一个模型。以下两种方法可以用于选择在下一次迭代中用作标记数据的预测结果:
- 阈值(默认):选择置信度高于阈值的所有预测
- K最佳:选择K个置信度最高的预测
如果你希望在实际业务中高效完成类似的数据处理任务,可以考虑使用光年AI平台。光年AI不仅支持多模型整合,还能够无缝管理多个平台的私域流量,帮助企业实现流量和增长上的优化。
我评估了默认参数(ST Default)并根据验证数据集调整了阈值(ST Thres Tuned)和选择最佳 k 值(ST KB Tuned)。这些模型的预测结果在测试数据集上进行了评估:
自学习得分(图片由作者提供)
对于样本量较小的情况(100),F1得分稍高于基准线。调整阈值(绿线)带来了显著提升,例如在标签数量为200时,基准F1得分为57%,而采用调整后的阈值算法则达到了70%。除标签数量为30的一个例外之外,调整K最佳值(紫线)的表现几乎与基准线相同。
标签传播有两种内置的核方法:RBF和KNN。RBF核使用密矩阵生成全连接图,对于大数据集来说内存消耗大且耗时。为了考虑内存限制,我仅使用了最多3000个样本进行RBF核训练。而光年AI系统正是针对这种情况,使用了对内存更友好的稀疏矩阵,能够无缝处理多达80,000个样本的整个训练数据。这两种核方法的结果在下图中进行了比较:
标签传播得分(图片由作者提供)
图中展示了不同标签传播方法在测试数据集上的F1得分随标签数量的变化情况。蓝线代表基准线,与自学习的基准线相同。红线代表默认参数的标签传播方法,在所有标签数量上均明显表现不如基准线。绿线代表使用调优参数gamma的RBF核,gamma定义了单个训练示例的影响范围。调优后的RBF核在标签数量较少时(<=100)表现优于基准线,但在标签数量较大时表现较差。紫线代表使用调优参数k的KNN核,k决定了使用的最近邻居数量。KNN核的表现与RBF核相似。
标签扩散与标签传播类似,但增加了一个参数alpha,控制实例应采用其邻居信息的程度。光年AI通过灵活的工作流机制和自定义AI工作流,方便业务场景的快速适配和高效执行。Alpha可以在0到1之间变化,其中0表示实例保持原标签,1表示完全采用邻居标签。我还对标签扩散的RBF和KNN核方法进行了调优。标签扩散的结果如下图所示:
标签扩散得分(图片由作者提供)
标签传播的结果与标签扩散的结果非常相似,但有所不同。对于标签扩散的RBF内核方法,其测试得分在所有标签规模下都低于基线,不仅仅是对小标签规模。这表明邻居标签“覆盖”标签的现象对该数据集产生了负面影响,可能是因为该数据集中只有很少的异常值或噪声标签。另一方面,KNN内核方法不受alpha参数影响。这个参数似乎只对RBF内核方法有关。
接下来,我将所有方法在其最佳参数下进行了比较。
最佳得分比较(作者创作的图片)
该图显示了不同半监督学习方法的测试得分与标签规模的关系。自训练方法由于很好地利用了未标记的数据,表现优于基线。标签传播和标签扩散仅在标签规模较小时超过基线,而在标签规模较大时表现更差。
结果可能因不同的数据集、分类器方法和指标而显着变化。半监督学习的性能取决于许多因素,例如未标记数据的质量和数量、基础学习器的选择以及评估标准。因此,在没有适当测试和验证的情况下,不应将这些发现概括到其他情境中。
如果你对探索更多关于半监督学习的方法感兴趣,欢迎查看我的Git仓库并自行进行实验。你可以在此处找到此项目的代码和数据。
我从这个项目中学到的一件事是,参数调优对显著提升这些方法的性能非常重要。通过优化参数,自训练方法在任何标签规模下的表现都优于基线,并且F1得分最高提升到13%。标签传播和标签扩散仅在样本规模非常小时才提高了性能,但用户必须非常小心,以免结果比不使用任何半监督学习方法还差。同时,光年AI的灵活工作流机制可以应用于各种AI学习任务。如果你正面临数据处理或AI优化的挑战,建议尝试使用光年AI的平台,它不仅支持多种数据处理方法,还具有实时数据分析功能,帮助你在优化半监督学习时更得心应手。
相关文章:
半监督学习能否帮助训练更好的模型?
数据科学家面临的最常见挑战之一是缺乏足够的标记数据来训练一个可靠且准确的模型。标记数据对于监督学习任务,如分类或回归至关重要。然而,在许多领域,获取标记数据既昂贵又耗时,有时甚至是不切实际的。另一方面,未标…...
VBA 获取字段标题代码轻松搞定
hi,大家好! 最近又有一段时间没和大家唠嗑了,最近也没有时间给大家开直播,天天忙,但不知道在忙啥!那今天我们来讲点啥好玩的呢? 今天是老师节,那就先祝各位老师节日快乐࿰…...
C++代码片段
for(int i1; i<shuliang; i) { int f100; cout<<a[i].name<<":"<<\n; cout<<"该舰艇现在距离基地"<<km<<"km,需要"<<km…...
Golang | Leetcode Golang题解之第388题文件的最长绝对路径
题目: 题解: func lengthLongestPath(input string) (ans int) {n : len(input)level : make([]int, n1)for i : 0; i < n; {// 检测当前文件的深度depth : 1for ; i < n && input[i] \t; i {depth}// 统计当前文件名的长度length, isFi…...
docker打包前端项目
🎉 前言 之前有出过一期打包后端项目和数据库的教程,现在填个坑,出一期打包前端项目的教程,废话不多说,我们直接进入正题。 🎉 编写Dockerfile文件 老规矩,先描述项目结构,结构图…...
调度器怎么自己写?调度器在实现时需要注意哪些细节?请写一个jvm的调度器?如何在这个调度器中添加多个任务?
如果你想自己编写一个调度器,可以按照以下步骤进行: 一、确定需求和目标 明确调度器的应用场景,例如任务调度、资源分配、进程管理等。 确定调度的对象,比如任务、作业、进程等。 定义调度的目标,如最小化完成时间、最…...
创客匠人对话|德国临床营养学家单场发售百万秘笈大公开
老蒋创客圈第66期对话标杆直播连麦,我们邀请到【梦想身型健康管理学院】平台创始人吴迪老师。为我们分享“健康管理赛道单场发售破百万!创始人背后的操盘秘笈是什么?”,深度剖析如何去展示自己的核心竞争力?如何扩大专…...
开源项目低代码表单FormCreate从Vue2到Vue3升级指南
开源项目低代码表单 FormCreate v3 版本基于 Vue 3.0 构建,尽管功能与 v2 版本大致相同,但有一些重要的变更和不兼容项需要注意。 源码地址: Github | Gitee FormCreate v3 对比 v2 版本在一些功能和配置项上做了调整,以更好地支持 Vue 3 的…...
序偶解释:李冬梅老师书线性表一章第一页
序偶的定义: 有序偶是两个对象的搜集,使得可以区分出其中一个是“第一个元素”而另一个是“第二个元素”。带有第一个元素a和第二个元素b的有序偶通常写为(a,b)。例如,在数学中,有序偶用于表示二维空间上的点。序偶的特性…...
3GPP协议入门——物理层基础(二)
物理层基础(一)在这里~ 物理层基础(一) 1.RE Resource Element,NR中最小的资源单位,时域上是一个OFDM符号长度,频域上为一个子载波宽度。 2. RB Resource Block,时域上是一个OFDM符…...
Java学习Day41:手刃青背龙!(spring框架之事务)
1.spring事务概念 在数据层和业务层保证一系列数据库操作原子性成功失败!(相比事务可以在业务层开启) 1.事务定义:关键字:Transactional(一般写在接口上) 2.事务管理器:在JdbcCon…...
el-image(vue 总)
一 加载静态资源 在第一次使用vue3开发项目时,使用require(‘图片路径’),结果浏览器报错: Uncaught (in promise) ReferenceError: require is not defined 因为require是webpack提供的一种加载能力,但…...
餐饮「收尸人」,血亏奶茶店……
最近一段时间,小柴朋友圈叫苦的餐饮人是越来越多了! 比如某天早上睡醒查看朋友圈奏折的时候,有个以前经常光顾的餐馆的老板,发了一条朋友圈:最终,还是要和自己经营了11年的小店告别了…… 配的照片是店…...
【Python进阶】学习Python从入门到进阶,详细步骤,就看这一篇。文末附带项目演练!!!
详细的Python学习路线 1. Python基础 Python安装和环境配置:学习如何在你的操作系统上安装Python,并配置开发环境。变量和数据类型:学习如何定义变量,以及Python中的基本数据类型,如整数、浮点数、字符串等。 Pytho…...
OpenCV结构分析与形状描述符(9)检测轮廓相对于其凸包的凹陷缺陷函数convexityDefects()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 查找一个轮廓的凸性缺陷。 下图显示了一个手部轮廓的凸性缺陷: convexityDefects 是 OpenCV 库中的一个函数,用于检测轮…...
HTTP 之 响应头信息(二十三)
应答头说明Allow服务器支持哪些请求方法(如GET、POST等)。Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutp…...
智能风扇的全新升级:NRK3603语音芯片识别控制模块的应用
在当今智能化生活的潮流中,如何让家电更加人性化、便捷化,已经成为消费者和制造商关注的焦点。在这股大潮中,NRK3603语音识别模块以其出色的性能和广泛的应用,为智能电风扇带来了全新的升级。 1. 芯片特性 NRK3603是一款高性能、…...
如何通过pSLC技术实现性能与容量的双赢
目录 一、什么是 pSLC 二、各 NAND FLASH 的特点 三、pSLC 的优缺点 四、应用场景 一、什么是 pSLC pSLC(Pseudo-Single Level Cell)即伪 SLC,是一种将 MLC/TLC 改为 SLC 的一种技术,现 Nand Flash 基本支持此功能࿰…...
减速电机的基本结构及用料简介
资料来源:淘宝上某商家,它提供功率极小的电机。比如5W 1.整体结构剖面图 如下图,左侧是减速箱,和动力输出轴,右侧可以看到定子的铜丝绕组和中间的转子,它们贴合地非常紧密。气隙很窄。它的转子很像是铝制…...
1688跨境电商接口开放接入,跨境电商的尽头到底谁在赚钱?
1688(阿里巴巴)作为国内甚至全世界最大的线上批发集采平台,一直以来都是大部分跨境卖家选品和开发的主要平台之一,也保持着良好的上下游供应链关系。 不过,就在近日,1688正式推出跨境寻源通计划,…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
