应用机器学习的建议 (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.mfbz.cn/a/346812.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP中一些特征函数导致的漏洞总结

第一部分: 特征函数 接触到几个常用的函数: \\ \\\ md5 intval strpos in_array preg_match str_replacephp用这些函数实现过滤一些代码,漏洞可能有一些特性,利用这些特征代码进行对比;账号密码对比;强制检…

马尔可夫预测(Python)

马尔科夫链(Markov Chains) 从一个例子入手:假设某餐厅有A,B,C三种套餐供应,每天只会是这三种中的一种,而具体是哪一种,仅取决于昨天供应的哪一种,换言之&#…

从c到c++——5:内联函数

在调用常规函数时,我们会在它的汇编代码中看到call指令。 如果我们继续调试,如果我们继续调试,会发现执行call会跳转到其他地方,之后会再调用一堆其他的指令,在我的测试(vs2022)下: …

day31WEB攻防-通用漏洞文件上传js验证mimeuser.ini语言特性

目录 1.JS验证 2.JS验证MIME 3.JS验证.user.ini 4.JS验证.user.ini短标签 (ctfshow154,155关) 5.JS验证.user.ini短标签过滤 [ ] 6.JS验证.user.ini短标签加过滤文件头 有关文件上传的知识 1.为什么文件上传存在漏洞 上传文件…

[蓝桥杯]真题讲解:飞机降落(DFS枚举)

[蓝桥杯]真题讲解&#xff1a;飞机降落&#xff08;DFS枚举&#xff09; 一、视频讲解二、暴力代码&#xff08;也是正解代码&#xff09; 一、视频讲解 视频讲解 二、暴力代码&#xff08;也是正解代码&#xff09; //飞机降落&#xff1a; 暴力枚举DFS #include<bits/…

【轮式平衡机器人】——TMS320F28069片内外设之GPIO

引入 接下来的几期博客会介绍轮式平衡机器人TMS320F28069片内外设&#xff0c;了解片内外设的基本原理&#xff0c;内容较为基础&#xff0c;都是些简单的simulink模型&#xff0c;旨在将复杂的原理过渡到simulink软件应用。足够了解的博友可跳过。 后续还将会结合MATLAB/Sim…

前端学习:HTTP协议、请求响应、分层解耦

HTTP协议 HTTP-概述 HTTP&#xff1a;Hyper Text Transfer Protocol(超文本传输协议)&#xff0c;规定了浏览器与服务器之间数据传输的规则。如果想知道http协议的数据传输格式有哪些&#xff0c;可以打开浏览器&#xff0c;点击 F12 打开开发者工具&#xff0c;点击Network 来…

DataStream API(转换算子)

目录 源算子 转换算子 1&#xff0c;基本转换算子 1.1映射&#xff08;map&#xff09; 1.2过滤&#xff08;filter&#xff09; 1.3扁平映射&#xff08;flatMap&#xff09; 2&#xff0c;聚合算子 2.1按键分区&#xff08;keyBy&#xff09; 2.2简单聚合 3&#x…

2024-01-24(ElasticSearch)

1.mysql和elasticsearch的架构&#xff1a; 2.IK分词器利于分中文词汇。 底层是有一个中文字典&#xff0c;这个字典中的中文词汇也是可以拓展的和禁用某些词。 3.mapping常见属性&#xff1a; type&#xff1a;数据类型 index&#xff1a;是否索引 analyzer&#xff1a;分…

2024年mongodb自建三节点副本集详细教程

环境说明 系统centos7.9 自建服务器或云服务器&#xff0c;硬件要求不低于2核2G内存&#xff0c;20G硬盘&#xff0c;文件系统默认是ext4即可。 生产环境最好单独一个磁盘存放数据库&#xff0c;方便数据备份和还原&#xff0c;避免干扰到其他磁盘的运作。 mongodb 4.4.27 …

QT 实现自动生成小学两位数加减法算式

小学生加减法训练 QT实现–自动生成两位数加减法算式&#xff0c;并输出txt文件 可以copy到word文件&#xff0c;设置适当字体大小和行间距&#xff0c;带回家给娃做做题 void MainWindow::test(int answerMax, int count) {// 创建一个随机数生成器QRandomGenerator *gener…

引领AI变革:边缘计算与自然语言处理结合的无尽可能

引言 讲到Ai&#xff0c;你第一时间会想到什么&#xff1f;是Chagpt和文心一言这样与人类交流自然的Ai生成式对话服务&#xff1f;还是根据关键字快速制图的Ai绘图&#xff1f;这些都是近年来人们所常知的Ai用途&#xff0c;我们今天来讲讲以自然语言处理为辅&#xff0c;在Ai赋…

JS之歌词滚动案例

让我为大家带来一个歌词滚动的案例吧&#xff01; 详细的介绍都在代码块中 我很希望大家可以自己动手尝试一下&#xff0c;如果需要晴天的mp3音频文件可以私信我 上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

Vue好看的组件库:Element

文章目录 1、什么是Element2、Element快速入门3、Element布局3.1、 Layout 局部3.2、容器布局 1、什么是Element Element&#xff1a;是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&#xff0c;用于快速构建网页 Element 提供了很多组件&#xff08;组成网页的部件…

使用DBSyncer同步Oracle11g数据到Mysql5.7中_实现全量数据同步和增量数据实时同步_操作过程---数据同步之DBSyncer工作笔记007

之前都是用mysql和Postgresql之间进行同步的,已经实现了数据的实时同步,现在要实现Oracle数据库到Mysql数据库的全量,以及增量同步. 因为之前配置的不对,这里架构名写成了orcl,所以导致,虽然能连接上,但是,在进行数据同步的时候,看不到表,所以这里说一下如何进行连接 这里,首先…

全球机器人产业:技术创新驱动下的市场与竞争新态势

原创 | 文 BFT机器人 近年来&#xff0c;随着颠覆性技术创新的不断涌现、市场新需求的迅速崛起以及外部冲击的深远影响&#xff0c;机器人产业正经历着前所未有的变革。在技术领域&#xff0c;机器人技术不断突破&#xff0c;智能化、自主化、协同化水平日益提升&#xff1b;在…

Java设计模式-装饰器模式(10)

大家好,我是馆长!今天开始我们讲的是结构型模式中的装饰器模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。。 装饰器模式(Decorator Pattern) 定义 装饰(Decorator)模式…

前端开发如何自己开发组件库

好多前端小伙伴干了五六年&#xff0c;一直在做切图仔&#xff0c;一看项目没啥亮点。今天开始&#xff0c;我就分享下自己开发组件库的历程。 注&#xff1a;文章会持续更新 环境 "dumi": "^2.2.0","father": "^4.1.0",这里我们站在巨…

消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板

问题概览 目前主流的消息队列技术&#xff08;MQ技术&#xff09;分为RabbitMQ和Kafka&#xff0c;其中深蓝色为只要是MQ&#xff0c;一般都会问到的问题。浅蓝色是针对RabbitMQ的特性的问题。蓝紫色为针对Kafka的特性的问题。 MQ的应用场景 MQ主要提供的功能为&#xff1a;异…

Database history tablesupgraded

zabbix升级到6之后&#xff0c;配置安装完成会有一个红色输出&#xff0c;但是不影响zabbix使用&#xff0c;出于强迫症&#xff0c;找到了该问题的解决方法。 Database history tables upgraded: No. Support for the old numeric type is deprecated. Please upgrade to nume…
最新文章