应用机器学习的建议 (Advice for Applying Machine Learning)

news2024/11/15 21:04:46

1.决定下一步做什么

问题:
假如,在你得到你的学习参数以后,如果你要将你的假设函数放到一组
新的房屋样本上进行测试,假如说你发现在预测房价时产生了巨大的误差,现在你的问题是要想改进这个算法,接下来应该怎么办?
解决思路:
一种办法是使用更多的训练样本。具体来讲,也许你能想到通过电话调查或上门调查来获取更多的不同的房屋出售数据。但是实际上特别多的数据是没有太大用处的。
另一个方法,你也许能想到的是尝试选用更少的特征集。因此如果你有一系列特征,比如𝑥1, 𝑥2, 𝑥3等等。也许有很多特征,也许你可以花一点时间从这些特征中仔细挑选一小部分来防止过拟合。或者也许你需要用更多的特征,也许目前的特征集,对你来讲并不是很有帮助。
获得更多的训练实例——通常是有效的,但代价较大,下面的方法也可能有效,可考虑先采用下面的几种方法。
1.尝试减少特征的数量
2.尝试获得更多的特征
3.尝试增加多项式特征
4.尝试减少正则化程度𝜆
5.尝试增加正则化程度𝜆

2.评估一个假设

用算法来评估假设函数,并以此为基础考虑如何避免过拟合和欠拟合问题。
选择参量来使训练误差最小化并不一定是好事,因为可能会出现过拟合的情况。
如何判定一个假设函数过拟合?
可以对假设函数ℎ(𝑥)进行画图,然后观察图形趋势,但对于特征变量不止一个的这种一般情况,还有像有很多特征变量的问题,想要通过画出假设函数来进行观察,就会变得很难甚至是不可能实现。为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用 70%的数据作为训练集,用剩下 30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。
在这里插入图片描述
测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:
1.对于线性回归模型,我们利用测试集数据计算代价函数𝐽
2.对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:
在这里插入图片描述

3.模型选择和交叉验证集

假设我们要在 10 个不同次数的二项式模型之间进行选择:
在这里插入图片描述
显然越高次数的多项式模型越能够适应训练集,但是适应训练集并不一定能推广到一般情况,只需要选择更能适应一般情况的模型,需要使用交叉验证集来帮助选择模型。
即:使用 60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用 20%的数据作为测试。
在这里插入图片描述
模型选择的方法为:

  1. 使用训练集训练出 10 个模型
  2. 用 10 个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
  3. 选取代价函数值最小的模型
  4. 用步骤 3 中选出的模型对测试集计算得出推广误差(代价函数的值)

代价函数:
在这里插入图片描述

模型选择是指在多个候选模型中选择一个最佳模型的过程。在机器学习中,不同的模型有不同的适用场景和性能表现,因此需要根据具体情况选择最适合的模型。常用的模型选择方法包括交叉验证、网格搜索等。

交叉验证集是用于评估模型泛化能力的数据集,它通常被分为训练集和测试集。训练集用于训练模型,测试集用于评估模型的泛化能力。通过将数据集分成多个子集,并在不同的子集上重复进行训练和测试,可以更准确地评估模型的性能,并选择最佳的模型参数。

在模型选择过程中,可以使用交叉验证集来评估不同模型的性能表现,并选择最佳的模型。常用的交叉验证方法包括k折交叉验证、留一法等。这些方法可以帮助我们评估模型的泛化误差,并选择最佳的模型参数,从而提高模型的性能表现。

4.诊断偏差和方差

问题:如果算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟
合问题。那么这两种情况,哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关?
在这里插入图片描述
通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:
在这里插入图片描述
在这里插入图片描述
对于训练集,当 𝑑 较小时,模型拟合程度更低,误差较大;随着 𝑑 的增长,拟合程度提高,误差减小。
对于交叉验证集,当 𝑑 较小时,模型拟合程度低,误差较大;但是随着 𝑑 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。
根据图表可知:
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合

5.正则化和偏差/方差

正则化可以通过调整模型参数或增加惩罚项来减小模型的复杂度,从而减小模型的偏差和方差。例如,L1正则化和L2正则化可以通过约束模型参数的绝对值或范数来减小模型的复杂度,dropout可以在训练过程中随机丢弃一部分神经元,从而使得模型不会过于依赖某一些神经元。
在训练模型的过程中,会使用正则化来防止过拟合,但是可能正则化过高或者过低,所以要选择合适的 λ。
在这里插入图片描述
我们选择一系列的想要测试的 𝜆 值,通常是 0-10 之间的呈现 2 倍关系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10共 12 个)。我们同样把数据分为训练集、交叉验证集和测试集。
在这里插入图片描述
选择𝜆的方法为:
1.使用训练集训练出 12 个不同程度正则化的模型
2.用 12 个模型分别对交叉验证集计算的出交叉验证误差
3.选择得出交叉验证误差最小的模型
4.运用步骤 3 中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与 λ 的值绘制在一张图表上:
在这里插入图片描述
当 𝜆 较小时,训练集误差较小(过拟合)而交叉验证集误差较大
• 随着 𝜆 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加

6.学习曲线

学习曲线是学习算法的一个很好的合理检验(sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(𝑚)的函数绘制的图表。
即,如果我们有 100 行数据,我们从 1 行数据开始,逐渐学习更多行的数据。思想是:当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。
在这里插入图片描述
但是高偏差/欠拟合的情况下,增加数据到训练集不一定是有效果的。
如何利用学习曲线识别高方差/过拟合?
假设我们使用一个非常高次的多项式模型,并且正则化非常小,可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。
在这里插入图片描述
在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。

学习曲线是一种用于评估机器学习模型性能的工具,它展示了模型在训练过程中的表现。学习曲线可以通过绘制训练集误差和验证集误差随训练集大小的变化曲线来生成。

学习曲线通常具有以下特点:

随着训练集大小的增加,训练集误差和验证集误差都会逐渐减小。
如果训练集大小增加到一定程度后,训练集误差和验证集误差会趋于稳定,这时模型已经充分学习了数据集中的信息,进一步增加训练集大小对提高模型性能的帮助不大。
如果模型存在过拟合或欠拟合问题,学习曲线会有不同的表现。过拟合会导致训练集误差和验证集误差之间的差距逐渐增大,而欠拟合会导致两者之间的差距保持较大。
学习曲线可以用于诊断模型的性能问题,以及指导模型选择和参数调整。通过观察学习曲线的形状和动态变化,可以了解模型是否过拟合或欠拟合,以及是否需要调整模型的超参数。此外,学习曲线还可以用于比较不同模型之间的性能表现,从而选择最优的模型。

7.综合总结

问题:怎样评价一个学习算法,了解了模型选择问题,偏差和方差的问题。诊断法则怎样帮助我们判断,哪些方法可能有助于改进学习算法的效果,而哪些可能是徒劳的呢?
在什么情况下应该怎样选择:

  1. 获得更多的训练实例——解决高方差
  2. 尝试减少特征的数量——解决高方差
  3. 尝试获得更多的特征——解决高偏差
  4. 尝试增加多项式特征——解决高偏差
  5. 尝试减少正则化程度 λ——解决高偏差
  6. 尝试增加正则化程度 λ——解决高方差
    神经网络的方差和偏差:
    在这里插入图片描述
    使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。
    通常选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。
    对于神经网络中的隐藏层的层数的选择,通常从一层开始逐渐增加层数,为了更好地作选择,可以把数据分为训练集、交叉验证集和测试集,针对不同隐藏层层数的神经网络训练神经网络, 然后选择交叉验证集代价最小的神经网络。

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

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

相关文章

C#,入门教程(31)——预处理指令的基础知识与使用方法

上一篇: C#,入门教程(30)——扎好程序的笼子,错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386 Visual Studio、C#编译器以及C#语法所支持的预处理指令,绝对是天才设计。 编译程序的时候会发现&am…

【技术】SpringBoot 接口怎么加密解密

1. 介绍 在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用 如果我们想保证数据传输的安全,对接口出参加密,入参解密。 但是不想写重复代码,我们可以提供一个通用starter,提…

代码随想录算法训练营第14天 | 二叉树的前序、中序、后序遍历(递归+迭代法)

二叉树的理论基础:(二叉树的种类,存储方式,遍历方式 以及二叉树的定义) https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 二叉树的递归遍历 Leetcode对应的三道习…

这种环境下腾讯64亿在北京拿地?

近期,金融市场出现较大波动,A股指数跌至2700点,同时恒生指数也下滑至15000点,引发了社会各界的关注和思考。与此同时,腾讯以64.2亿元拿下北京海淀区地块,马云和蔡崇信又增持阿里股票,这一系列的…

自学网安-DNS

01DNS Domain Name Service域名服务 作用:为客户机提供域名解析服务器 02域名组成 2.1域名组成概述 如"www.sina.com.cn"是一个域名,从严格意义上讲,"sina.com.cn"才被称为域名(全球唯一),而"www"…

【若依】前后端分离框架部署

1.拉取若依项目代码 进入若依 基于SpringBootVue前后端分离的Java快速开发框架,并通过相应协议拉取到本地IDE 2.前端部署 2.1.下载nodejs 进入nodejs官网下载所需版本, 完成后在命令行运行npm -v可查询版本 2.2.配置依赖 在若依ui目录下运行 np…

Linux第33步_TF-A移植的第1步_创建新的设备树

TF-A移植第1步就是创建新的设备树,并命名为“stm32mp157d-atk”。 和“TF-A移植”有关的知识点: 1)设备树英文名字叫做Device tree,用来描述板子硬件信息的,比如开发板上的 CPU有几个核 、每个CPU核主频是多少,IIC、…

web安全学习笔记【10】——数据包分析

基础[1] [2] [3] [4] 入门-HTTP数据包&Postman构造&请求方法&请求头修改&状态码判断[5] [6] [7] #知识点: 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OS…

[go语言]数据类型

目录 知识结构 整型、浮点型 1.整型 2.浮点型 复数、布尔类型 1.复数 2.布尔类型 字符与字符串 1.字符串的格式化 2.字符串的截取 3.格式化好的字符串赋值给量 4.字符串的转换 5.strings包 知识结构 整型、浮点型 1.整型 在Go语言中,整型数据是一种基…

零基础学Python(5)— 基本数据类型

前言:Hello大家好,我是小哥谈。在内存中存储的数据可以有多种类型。例如:一个人的姓名可以用字符型存储,年龄可以使用数值型存储,婚姻状况可以使用布尔型存储。这里的字符型、数值型、布尔型都是Python语言中提供的基本…

MyBatis的逆向工程的创建,generator插件的使用和可能出现的一些问题,生成的实体类多出.java 1 .java 2这种拓展文件的处理方案

目录 创建逆向工程的步骤 ①添加依赖和插件 ②创建MyBatis的核心配置文件 ③创建逆向工程的配置文件 ④执行MBG插件的generate目标 数据库版本8有可能出现的问题: 1、生成的实体类多了.java 1 .java 2的拓展文件... 2、生成的属性与表中字段不匹配&#xff…

orm-04-Spring Data JPA 入门介绍

拓展阅读 The jdbc pool for java.(java 手写 jdbc 数据库连接池实现) The simple mybatis.(手写简易版 mybatis) Spring Data JPA Spring Data JPA,作为更大的 Spring Data 家族的一部分,使得基于 JPA 的仓库实现变得更加容易。…

微信小程序首页、界面布局、功能简洁(示例三)

微信小程序首页界面布局、页面简洁,功能简单 直接上具体代码: 1、js代码 Page({/*** 页面的初始数据*/data: {imgList: [../../images/demo.jpg, ../../images/demo.jpg, ../../images/demo.jpg],navList: [{src: ../../images/nav1.png,title: 菜单一}…

硬件基础:组合逻辑电路

什么是组合逻辑电路 组合逻辑电路是由一些基本的逻辑门电路组成的,没有反馈,输出仅取决于输入。 组合逻辑电路是数字逻辑电路中一种重要的电路类型,它是由多个逻辑门(例如与门、或门、非门等)组成的电路。组合逻辑电路…

vue3和vite项目在scss中因为本地图片,不用加~

看了很多文章说要加~,真的好坑哦,我的加了~反而出不来了: 304 Not Modified 所以需要去掉~: /* 默认dark主题 */ :root[themered] {--bg-color: #0d1117;--text-color: #f0f6fc;--backImg: url(/assets/images/redBg.png); }/* …

Go语言学习笔记:基础语法和类型

Go语言学习笔记:基础语法和类型 目录 Go语言学习笔记:基础语法和类型学习路线前言变量声明常量数据类型布尔型(Boolean)整型(Integer)浮点型(Floating point)复数型(Comp…

解读 EventBridge Transform:数据转换和处理的灵活能力

云布道师 阿里云 EventBridge 提供了强大而灵活的事件总线服务,它可以连接应用程序、阿里云云服务和阿里云 Serverless 服务来快速构建 EDA(Event-driven Architectures)事件驱动架构,驱动应用与应用,应用与云的连接。…

从一到无穷大 #21 从基于多数据模型分析负载的Benchmark讨论多模数据库的发展方向

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言M2Bench测试结果从Lindorm看待多模的发展方向总结 引言 《M2Bench: A Database …

echarts:折线图的常用操作

文章目录 背景基础折线图添加一些样式区域高亮 背景 本文将带大家一步一步的熟悉折线图相 API,关于如何初始化,可以看我这篇文章 echars:图表中核心的概念,本文只讲核心配置。 基础折线图 option {xAxis: {type: category,// …

VUE+Vis.js鼠标悬浮title提前显示BUG解决方法

在使用VUEVis.js做拓扑图,利用鼠标悬浮放在图标展示设备信息时,发现鼠标一放在图标上面时,标题表会提前在放置的元素下显示,鼠标再放到图标上去元素才会隐藏变成悬浮状态 解决方法: 添加一个div元素,设置v…