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

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.mzph.cn/news/644880.shtml

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

相关文章

CMS如何调优

业务JVM频繁Full GC如何排查 原则是先止损,再排查。 FGC的原因是对象晋升失败或者并发模式失败,原因都是老年代放不下晋升的对象了。 1.可能是大对象导致的内存泄漏。快速排查方法:观察数据库网络IO是否和FGC时间点吻合,找到对应…

碳排放预测 | Matlab实现LSTM多输入单输出未来碳排放预测,预测新数据

碳排放预测 | Matlab实现LSTM多输入单输出未来碳排放预测,预测新数据 目录 碳排放预测 | Matlab实现LSTM多输入单输出未来碳排放预测,预测新数据预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现LSTM长短期记忆神经网络多输入单输出未来…

推荐收藏!48道数据分析师高频面试题汇总!

大家好,最近很多小伙伴私信我,讲一下数据分析的面试题,今天给大家整理了48道数据分析师面试时被频繁问到的题目,找数据分析岗位的同学一定要码住认真看。 想了解最新的面试动态、最新高频考点、技术交流的同学,可以文…

别不信❗️你离数据专家只差一个CDMP证书

1⃣️为什么选择CDMP证书? 🌟🌟亲爱的朋友们,如果你在寻找一个能让你在数据管理领域大展拳脚的证书,那么CDMP(Certified Data Management Professional)证书就是你的不二之选!&#…

西瓜书读书笔记整理(十二) —— 第十二章 计算学习理论(上)

第十二章 计算学习理论(上) 12.1 基础知识12.1.1 什么是计算学习理论(computational learning theory)12.1.2 什么是独立同分布(independent and identically distributed, 简称 i . i . d . i.i.d. i.i.d.&#xff0…

一键拥有你的GPT4

这几天我一直在帮朋友升级ChatGPT,现在已经可以闭眼操作了哈哈😝。我原本以为大家都已经用上GPT4,享受着它带来的巨大帮助时,但结果还挺让我吃惊的,还是有很多人仍苦于如何进行升级。所以就想着写篇教程来教会大家如何…

响应拦截器的 return Promise.reject(res.data.message)

今天在看老师讲解代码的时候,解决了我心中的一些疑惑。 在做excel文件导出的时候,没有告诉浏览器文件的格式是Blod产生了报错。 看下图: 可以看到下面的内容:如果业务成功 返回 res.data 如果业务失败,给出错误信息的提示,将这个错误抛出去。 因此我们在发送一个…

基于springboot+vue的网上租赁系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

鸿蒙开发案列一

1、开发需求 案例app一打开是“Hello world” 界面,开发者点击“Hello world”变成“Hello ArkUI”’ 2、源代码 Entry Component struct Hello {State person_name: string Worldbuild() {Row() {Column() {Text(Hello this.person_name).fontSize(50).fontWei…

PMP证书要怎么考,含金量怎么样?

PMP含金量更多的是“敲门砖”作用,公司招聘的门槛,现在坐项目的大部分都需要PMP/NPDP证书。 当然现在PMP管理模式也很热门,对企业发展很有利,各大企业都有引进改良应用在公司的项目上,之前在校友群里面大家在讨论PMP …

ESP8266模块WIFI功能Deauther及Evil-Twin实验过程

1.下载ESP8266Flasher及deauther2.1.0_1mb.bin这个固件 2.连接ESP8266模块到电脑 设备管理器可看到成功连接的ESP8266设备 3.开始刷入固件到ESP8266模块 运行ESP8266Flasher并点击Config选择固件: 配置高级选项: 点击Flash开始刷入固件,固件成功刷入如下: 按一下ESP8266模块…

操作系统导论-课后作业-ch14

1. 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h>int main() {int *i NULL;free(i);return 0; }执行结果如下&#xff1a; 可见&#xff0c;没有任何报错&#xff0c;执行完成。 2. 执行结果如下&#xff1a; 3. valgrind安装使用参考&a…

保姆级教程: GPTs接入广告到提现成功全过程真实记录

因为相信&#xff0c;所以看见 &#x1f31f; 1月19日&#xff0c;在AI社群首次了解到GPTs能通过接入广告获得收益。虽然对收益的多少和提现的可行性有所疑问&#xff0c;但我还是立刻在我的GPTs上尝试了这一功能。这一探索的旅程&#xff0c;如同跨入了一个未知的新世界。我的…

【江科大】STM32:旋转编码器接口

Encoder Interface 编码器接口 编码器接口可接收增量&#xff08;正交&#xff09;编码器的信号根据编码器旋转产生的正交信号脉冲&#xff0c;自动控制CNT自增或自减从而指示编码器的位置、旋转方向和旋转速度 &#xff08;PWM就是通计时器计次达到测频率的目的&#xff0c;而…

电脑文件mfc140.dll丢失的解决方法指导,怎么快速修复mfc140.dll

mfc140.dll 文件的缺失是个普遍的问题&#xff0c;在日常使用中可能会时不时遇到。本文主要目的是详细介绍一旦遇到 mfc140.dll 文件缺失&#xff0c;应该如何进行下载和安装的步骤。不再赘言&#xff0c;下面就一起深入了解mfc140.dll丢失的解决方法指导。 一. mfc140.dll的作…

【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(三):性能优化策略

关于MySQL部分的核心知识进行一网打尽,包括三部分:基础知识考察、核心机制策略、性能优化策略,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:性能优化策略,子节点表示追问或同级提问 读写分离 分布式数据库的…

git 对象压缩及垃圾对象清理

git 对象压缩及垃圾对象清理 这篇文章让我们来看看 git 的对象压缩机制&#xff0c;前面的几篇文章我们提到&#xff0c;在执行 git add 命令会会把文件先通过 zlib 压缩后放入到「暂存区」&#xff0c;我们先看看这个步骤&#xff1a; 我们这个实例中有一个 1.28m 的 index.…

短视频账号矩阵系统+无人直播系统源码技术开发

短视频账号矩阵系统无人直播系统源码技术开发涉及到多个领域&#xff0c;包括但不限于前端开发、后端开发、数据库设计、网络通信等。 以下是一些基本技术的步骤和注意事项&#xff1a; 1.技术需求分析设计&#xff1a;首先&#xff0c;需要明确开发短视频账号矩阵系统和无人直…

Springboot+vue的科研工作量管理系统的设计与实现(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的科研工作量管理系统的设计与实现&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的科研工作量管理系统的设计与实现…

python_ACM模式《剑指offer刷题》链表1

题目&#xff1a; 面试tips&#xff1a; 询问面试官是否可以改变链表结构 思路&#xff1a; 1. 翻转链表&#xff0c;再遍历链表打印。 2. 想要实现先遍历后输出&#xff0c;即先进后出&#xff0c;因此可借助栈结构。 3. 可用隐式的栈结构&#xff0c;递归来实现。 代码…