机器学习基础(五)监督与非监督学习的结合

导语:上一节我们详细探索非监督学习的进阶应用,详情可见:

机器学习基础(四)非监督学习的进阶探索-CSDN博客文章浏览阅读613次,点赞15次,收藏13次。非监督学习像一位探险家,挖掘未标记数据的未知领域。它不依赖预先定义的类别或标签,而是试图揭示数据自身的结构和关系。这种学习方式在处理复杂数据集时尤其有价值,因为它能发现人类可能未曾预见的模式和联系。https://blog.csdn.net/qq_52213943/article/details/136188233?spm=1001.2014.3001.5502        这一节,我们将详细探索监督与非监督学习的结合使用。

目录

监督与非监督学习的结合

监督与非监督学习的结合:解决复杂问题的优势

数据利用率的提高

更好的泛化能力

复杂情况下的应用

创新的解决方案

半监督学习:最佳两界的结合

概述

应用场景

技术实现

强化学习:决策的艺术

应用场景

半监督学习实例:使用自训练模型进行文本分类

强化学习实例:使用Q学习解决简单迷宫问题

环境设置

Q表初始化并开始学习


监督与非监督学习的结合

        将监督学习和非监督学习结合起来,就像将两种不同的艺术形式融合,创造出全新的作品。这种结合利用了两种学习方法的优点,能够处理更复杂的数据集,并提高模型的准确性和泛化能力。

监督与非监督学习的结合:解决复杂问题的优势

        在探讨监督学习和非监督学习结合方法时,一个关键的优势是它们在处理复杂和多变数据集时的能力。这种结合方法像是在搭建一个多功能的工具箱,不仅提高了解决问题的灵活性,还增强了模型对新情况的适应能力。

数据利用率的提高

        在传统的监督学习中,模型完全依赖于大量的标记数据。然而,在现实世界中,标记数据往往稀缺且昂贵。通过结合非监督学习,我们可以利用未标记数据,这在很多情况下更容易获得。这种方法使得模型能够从更多的数据中学习,从而提高了整体的数据利用率。

更好的泛化能力

        结合监督学习和非监督学习的方法可以提高模型的泛化能力。非监督学习部分帮助模型理解数据的基本结构和分布,使其在面对新的、未见过的数据时表现更好。这种能力对于那些需要模型具有高度适应性的应用场景尤为重要。

复杂情况下的应用

        在一些复杂的场景中,比如自然语言处理或图像识别,单纯的监督学习或非监督学习可能无法有效处理所有情况。结合这两种方法可以提取更丰富的特征,理解更复杂的模式,从而在这些复杂的任务中取得更好的表现。

创新的解决方案

        这种结合方法为机器学习提供了新的视角和技术路线,使研究人员和实践者能够探索前所未有的解决方案。例如,半监督学习和强化学习已经在诸如自动驾驶、个性化医疗等领域展现了其巨大的潜力。

半监督学习:最佳两界的结合

概述

        半监督学习就像是桥梁,连接了监督学习和非监督学习的两个岛屿。在这座桥上,不仅可以利用标记数据(监督学习的特点),还可以利用大量未标记的数据(非监督学习的特点)。这种方法能够让我们在数据标记有限的情况下,最大化学习效率和模型性能。

        在很多实际应用中,获取大量标记数据既昂贵又耗时。半监督学习通过利用未标记的数据,可以显著提升模型的学习能力。例如,通过观察未标记数据的分布,模型可以更好地理解整体数据结构,从而在有限的标记数据上做出更准确的推断。

        通常,半监督学习首先使用未标记数据训练一个基础模型,捕捉数据的基本特征和结构。然后,使用标记数据对模型进行微调,以提高其对特定任务的准确性。

应用场景
  • 文本分类。在文本分类任务中,我们可能只有少量的文本被标记了类别(如正面或负面情感),但有大量未标记的文本可用。半监督学习可以帮助我们利用这些未标记文本来提升分类模型的性能。
  • 图像识别。在图像识别领域,半监督学习可以用于提升模型对新图像的识别能力,特别是在标记样本有限的情况下。
技术实现
  • 自训练模型,这是一种简单的半监督学习方法,其中首先使用少量标记数据训练一个模型,然后用该模型预测未标记数据的标签,并将最有信心的预测结果作为新的训练数据。
  • 生成式模型,例如,使用生成对抗网络(GANs)或变分自编码器(VAEs)来学习数据的分布,然后利用这些知识来指导监督学习任务。

强化学习:决策的艺术

        虽然强化学习通常被视为一个独立的学习范式,但它也可以看作是监督学习和非监督学习的一个扩展。在强化学习中,模型通过与环境的互动来学习最佳行为或策略。

        强化学习是机器学习的一个分支,它模拟了生物学习过程中的试错机制。你可以将它想象成一个游戏,其中的“玩家”(即学习算法)需要通过探索来学习如何完成特定任务或达成目标。

        与传统的监督学习不同,强化学习不依赖于数据集中的标签,而是通过与环境的互动来学习。它就像是一个探险家,在每次尝试和失败中学习如何更好地做出决策。

        试错过程:在强化学习中,算法(或智能体)通过尝试不同的行为并观察结果来学习。每当智能体做出选择,它会从环境中获得反馈(通常是奖励或惩罚),并据此调整其行为。

        奖励系统:学习过程的核心在于奖励系统。智能体的目标是最大化其长期收到的奖励总和,这可能涉及到权衡短期利益和长期利益。

应用场景

        自动驾驶汽车,在这个应用中,强化学习可以帮助汽车学习如何在复杂的道路环境中做出最佳的驾驶决策;游戏AI,从棋类游戏到视频游戏,强化学习被用来训练能够战胜人类玩家的高水平AI;个性化推荐,强化学习还可以用于个性化推荐系统,如在线购物或视频流平台,通过不断学习用户的偏好来提供更准确的推荐。

        在强化学习应用于自动驾驶汽车的场景中,汽车被视为智能代理,在一个不断变化的环境中作出决策。这个环境包括其他车辆、行人、交通信号灯和道路的不同状况。

        自动驾驶汽车(智能代理)通过观察环境状态,并基于这些观察做出减速动作,随后它会收到来自环境的反馈,图中是一个奖励信号,该信号表明其先前动作的效果。通过这种方式,汽车逐渐学习了哪些动作会导致正面的结果,从而改善其决策策略。强化学习算法通过与环境的交互学习,不断优化其决策策略,以实现如平滑驾驶、避免碰撞、遵守交通规则等目标。

半监督学习实例:使用自训练模型进行文本分类

        假设有一些标记的文本数据和大量未标记的文本数据,开发者将使用这些数据来训练一个文本分类模型。具体来说,是使用自训练模型进行文本分类。本节的示例将展示如何结合少量的标记数据和大量的未标记数据来提升文本分类模型的性能,半监督学习文本分类的步骤如下。

  • 数据准备:加载并分割已标记和未标记的数据。
  • 模型训练:首先使用已标记数据训练基础分类器。
  • 自训练:使用基础分类器对未标记数据进行预测,然后将预测结果中最自信的一部分加入训练集。
  • 再训练:使用扩展的训练集重新训练分类器。
import pandas as pd
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.feature_extraction.text import CountVectorizer
# 加载数据(假设已经加载为Pandas DataFrame)
# labeled_data: 已标记数据; unlabeled_data: 未标记数据
# 'text'是文本特征,'label'是标签
# 向量化文本数据
vectorizer = CountVectorizer()
X_labeled = vectorizer.fit_transform(labeled_data['text'])
y_labeled = labeled_data['label']
X_unlabeled = vectorizer.transform(unlabeled_data['text'])
# 训练初始模型
model = SVC(probability=True)
model.fit(X_labeled, y_labeled)
# 预测未标记数据
proba = model.predict_proba(X_unlabeled)
# 选择最高置信度的数据
high_confidence_indices = [i for i, p in enumerate(proba.max(axis=1)) if p > 0.9]
new_training_samples = X_unlabeled[high_confidence_indices]
new_training_labels = model.predict(new_training_samples)
# 将新数据添加到训练集
X_train_extended = vstack([X_labeled, new_training_samples])
y_train_extended = np.concatenate([y_labeled, new_training_labels])# 重新训练模型
model.fit(X_train_extended, y_train_extended)# 评估模型性能(使用测试集,假设已经分割好)
X_test = vectorizer.transform(test_data['text'])
y_test = test_data['label']
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

强化学习实例:使用Q学习解决简单迷宫问题

        在这个示例中,我们将展示如何使用Q学习(强化学习的一种方法。 Q学习就是要记录下学习过的策略,因而告诉智能体什么情况下采取什么行动会有最大的奖励值。)算法训练一个智能体在迷宫中找到出口。

环境设置

        假设迷宫是一个网络,每个格点代表了智能体可能处于的状态。智能体可以采取动作,包括向上、向下、向左、向右四个方向的移动。在这个迷宫中,有一些状态被标记为出口,当智能体到达出口时,它将获得正奖励,这可以被视为成功完成任务的奖励(例如+1)。然而,迷宫中还存在一些障碍物或墙壁,如果智能体撞到墙壁,它将受到负奖励,这可以被视为一个惩罚(例如-1)。

        在这个环境中,智能体的目标是学会采取适当的行动,以最大化累积奖励,从起始状态成功导航到出口状态,同时避免与墙壁碰撞。这个任务反映了强化学习中一个常见的情境,智能体必须在不断尝试和学习的过程中找到最佳策略,以达到预定的目标。

Q表初始化并开始学习

        使用numpy创建一个Q表,每个状态-动作对应一个初始值(通常为0),智能体根据Q表以一定概率随机选择动作(探索),或选择具有最高Q值的动作(利用),执行动作后,环境提供下一个状态和奖励,根据公式更新Q表中的值:
Q(state,action) = Q(state,action) + α * (reward + γ * max(Q(next_state, all_actions)) - Q(state,action))

由公式可知,α是学习率,也是折扣因子。

import numpy as np
import random
# 定义迷宫的状态数和动作数
n_states = 4  # 例如迷宫有4个格子
n_actions = 4  # 上、下、左、右
# 初始化Q表
Q = np.zeros((n_states, n_actions))
# Q学习参数
alpha = 0.1  # 学习率
gamma = 0.6  # 折扣因子
epsilon = 0.1  # 探索率
# Q学习过程
for i in range(1000):state = 0  # 假设起始状态为0while state != n_states - 1:  # 假设最后一个状态为出口if random.uniform(0, 1) < epsilon:action = random.randint(0, n_actions - 1)  # 探索else:action = np.argmax(Q[state])  # 利用# 假设getNextStateAndReward是一个函数,根据当前状态和动作返回下一个状态和奖励next_state, reward = getNextStateAndReward(state, action)# 更新Q值Q[state, action] += alpha * (reward + gamma * np.max(Q[next_state]) - Q[state, action])state = next_state# 打印最终的Q表
print("Q-table:")
print(Q)

        在上述代码示例中,包括了一个简单的Q学习过程,用于在迷宫中学习一个Q表格。这个Q表格Q表格的每一行代表一个状态,每一列代表一个动作。智能体根据探索率(epsilon)选择探索或利用策略来采取动作,并使用Q学习的更新规则来更新Q值。这是一个基本的Q学习示例,用于解决迷宫问题。

下一节我们将进行TensorFlow与PyTorch工具的介绍讲解

机器学习基础(六)TensorFlow与PyTorch-CSDN博客对于追求稳定性和可扩展性的生产环境项目,TensorFlow可能更合适;而对于注重灵活性和快速迭代的研究项目,PyTorch可能更优。https://blog.csdn.net/qq_52213943/article/details/136215309?spm=1001.2014.3001.5502​​​​​​​-----------------

以上,欢迎点赞收藏、评论区交流

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

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

相关文章

电路设计(25)——4位数字频率计的multisim仿真及PCB设计

1.设计要求 使用4位数码管&#xff0c;显示输入信号的频率。完成功能仿真后&#xff0c;用AD软件&#xff0c;画出原理图以及PCB。 2.电路设计 输入信号的参数为&#xff1a; 可见&#xff0c;输入为168HZ&#xff0c;测量值为170HZ&#xff0c;误差在可接受的范围内。 3.PCB设…

Bluesky数据采集框架-2

访问保存的数据 到此&#xff0c;自然想到了"我如何访问我保存的数据&#xff1f;"。从bluesky的视角&#xff0c;那真的不是bluesky的关注&#xff0c;但它是一个合理的问题&#xff0c;因此我们将强调一个特定的场景。 注意&#xff1a;本章假设你正在使用databr…

AI:134-基于深度学习的社交媒体图像内容分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

C语言——实用调试技巧——第2篇——(第23篇)

坚持就是胜利 文章目录 一、实例二、如何写出好&#xff08;易于调试&#xff09;的代码1、优秀的代码2、示范&#xff08;1&#xff09;模拟 strcpy 函数方法一&#xff1a;方法二&#xff1a;方法三&#xff1a;有弊端方法四&#xff1a;对方法三进行优化assert 的使用 方法五…

Spring之AOP源码解析(下)

前言 在上一遍文章中,我们主要讲解了ProxyFactory在Spring完成AOP动态代理的过程中发挥的作用。这一篇我们主要讲解这些注解都是如何注入Advisors,然后分析这些Advisors生效的条件 注解都是如何注入Advisor并匹配的 EnableTransactionManagement注解 我们在之前提到EnableT…

STM32 TCP实现OTA

芯片&#xff1a;stm32f407 开发平台&#xff1a;stm32cubeide 上位机开发平台&#xff1a;visual studio 2017 1. FLASH分配 将flash划分为四个部分&#xff1a; bootloader: 0x8000000-0x800ffff app1: 0x8010000-0x805ffff app2: …

一流的财务:搞数据!!!(干货)

“三流财务给数据&#xff0c;二流财务给分析报告&#xff0c;一流财务给....&#xff08;解决方案&#xff09;“这些文章应该很多人都看到过&#xff0c;这个口号粗看好像很有道理&#xff0c;但笔者并不认同&#xff0c;因为大家都忽略了一个重要的概念&#xff1a;数据&…

什么是rouge metric

采用分类任务的指标评估生成任务的问题 举个例子&#xff0c;在一个seq2seq模型中&#xff0c;黄金标签是“police killed the gunman”&#xff0c;模型输出是"the gunman police killed"&#xff0c;两句话的意思是有差别的&#xff0c;但是从unigram的角度&#…

虚 拟 化原理

1 概念&#xff1a; ①通俗理解&#xff1a; 虚拟化是在硬件和操作系统之间的实践 ②通过对计算机的服务层级的理解&#xff0c;理解虚拟化概念 抽离层级之间的依赖关系&#xff08;服务器虚拟化&#xff09; 2 虚拟化分类 ①按架构分类 ◆寄居架构&#xff1a;装在操作系统上…

OSCP靶场--Nickel

OSCP靶场–Nickel 考点(1.POST方法请求信息 2.ftp&#xff0c;ssh密码复用 3.pdf文件密码爆破) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.237.99 -sV -sC -p- --min-rate 5000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-02-22 04:06 EST Nm…

5.1 Ajax数据爬取之初介绍

目录 1. Ajax 数据介绍 2. Ajax 分析 2.1 Ajax 例子 2.2 Ajax 分析方法 &#xff08;1&#xff09;在网页页面右键&#xff0c;检查 &#xff08;2&#xff09;找到network&#xff0c;ctrl R刷新 &#xff08;3&#xff09;找 Ajax 数据包 &#xff08;4&#xff09;…

【前后端的那些事】文件上传组件封装

文章目录 效果前端代码后端代码组件封装 效果 前端代码 /views/file/file.vue <template><el-row><el-uploadv-model:file-list"fileList"class"upload-demo"multiple:auto-upload"false":on-preview"handlePreview"…

Swiper.js:不识这个轮播图js库,说明你的前端还未入门

hello&#xff0c;我是贝格前端工场&#xff0c;本期给大家带来轮播图的s库&#xff1a;Swiper.js&#xff0c;用这个类库处理轮播图、幻灯片、画廊那是得心应手&#xff0c;非常的easy&#xff0c;欢迎老铁们点赞关注&#xff0c;如有前端定制开发需求可以私信我们。 一、Swip…

网络编程、UDP、TCP

计算机网络 就是将地理位置不同的具有独立功能的多台计算及外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软件以及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统 目的 传播交流信息、数据交换、通信 如何做…

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理 各位大佬&#xff0c;这是我的自学笔记&#xff0c;如有错误请指正&#xff0c;也欢迎在评论区学习交流&#xff0c;谢谢&#xff01; CUDA编程模型 我们使用CUDA_C语言进行CUDA编程&am…

【Vue3】‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

问题 今天拿到别人项目的时候&#xff0c;我平时比较习惯用pnpm&#xff0c;我就使用pnpm i先下载依赖包&#xff0c;下载完成后&#xff0c;启动项目&#xff0c;就开始报以下错误&#xff01; 但是当我执行pnpm i的时候&#xff0c;vite不应该就已经被我下载下来了吗 研究了…

【Java程序设计】【C00307】基于Springboot的基Hadoop的物品租赁管理系统(有论文)

基于Springboot的基Hadoop的物品租赁管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的基于 Hadoop的物品租赁系统的设计与实现&#xff0c;本系统有管理员、用户二种角色权限&#xff1b; 前台首页&#…

day11-项目集成SpringSecurity-今日指数

项目集成SpringSecurity 学习目标 理解自定义认证和授权过滤器流程&#xff1b;理解项目集成SprignSecurity流程&#xff1b; 第一章 自定义认证授权过滤器 1、SpringSecurity内置认证流程 通过研究SpringSecurity内置基于form表单认证的UsernamePasswordAuthenticationFi…

【工程院院士加盟】第四届计算机通信与人工智能国际会议

CCAI 2024 | Xian, Chinahttp://ccai.net/ - IEEE出版&#xff0c;EI核心和Scopus检索 - 工程院院士&#xff0c;IEEE Fellow等学术大咖主题演讲 - 会议时间-地点&#xff1a;2024年5月24-26日&#xff0c;中国西安 会议简介 Brief Introduction 作为人工智能的重要传播技术…

Linux环境下基本指令

今天我们一起来认识一下Linux环境下一些基本的指令&#xff0c;这些指令是我们学习Linux的基础&#xff0c;只有掌握了这些指令&#xff0c;我们才能在Linux环境下进一步学习知识&#xff0c;话不多说&#xff0c;我们开始&#xff08;以下演示操作是在云服务器的环境下&#x…