机器学习——评估和改进学习算法

news2024/11/18 7:43:22

0. 引言

当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以做什么?

  1. 获得更多的训练样本——通常是有效的,但代价较大,下面的方法也可能有效,可考虑先采用下面的几种方法。
  2. 尝试减少特征的数量
  3. 尝试获得更多的特征
  4. 尝试增加多项式特征
  5. 尝试减少正则化程度 λ \lambda λ
  6. 尝试增加正则化程度 λ \lambda λ

我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。

1. 评估一个假设

当我们确定学习算法的参数的时候,我们考虑的是选择参量来使训练误差最小化,但是仅仅是因为这个假设具有很小的训练误差,并不能说明它就一定是一个好的假设函数。我们学习了过拟合假设函数的例子,这种过拟合的假设函数推广到新的训练集上是不适用的。
在这里插入图片描述
那么,该如何判断一个假设函数是过拟合的呢?对于一个简单的例子,我们可以对假设函数 h ( x ) h(x) h(x)进行画图,然后观察图形趋势,但对于特征变量不止一个的这种一般情况,还有像有很多特征变量的问题,想要通过画出假设函数来进行观察,就会变得很难甚至是不可能实现。

因此,我们需要另一种方法来评估我们的假设函数过拟合检验。

为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。
在这里插入图片描述
测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

  1. 计算代价函数
    对于线性回归模型,我们利用测试集数据计算代价函数 J J J
    对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:
    在这里插入图片描述

  2. 使用0/1错误分类度量来定义测试误差
    计算错误分类误差:
    在这里插入图片描述
    然后对计算结果求平均值,得到测试误差。

2. 模型选择和交叉验证机

假设我们要在10个不同次数的二项式模型之间进行选择:
在这里插入图片描述
显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用交叉验证集来帮助选择模型。

即:使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集

模型选择的方法为:

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

Train/validation/test error
Training error:
在这里插入图片描述
Cross Validation error:
在这里插入图片描述
Test error:
在这里插入图片描述

3. 诊断偏差和方差

当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。高偏差和高方差的问题基本上来说是欠拟合和过拟合的问题。
在这里插入图片描述
我们将训练集和交叉验证集的代价函数误差 e r r o r error error 与多项式的次数 d d d 绘制在同一张图表上来帮助分析:
在这里插入图片描述
对于训练集,当 d d d 较小时,模型拟合程度更低,误差较大;随着 d d d 的增长,拟合程度提高,误差减小。
对于交叉验证集,当 d d d 较小时,模型拟合程度低,误差较大;但是随着 d d d 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。

根据上面的图表,我们知道:
• 训练集误差和交叉验证集误差近似时:偏差/欠拟合
• 交叉验证集误差远大于训练集误差时:方差/过拟合:

4. 正则化和偏差/方差

在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能会正则化的程度太高或太小了,即我们在选择λ的值时也需要思考与刚才选择多项式模型次数类似的问题。在这里插入图片描述
我们选择一系列的想要测试的 λ \lambda λ 值,通常是 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 0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10 0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10共12个)。 我们同样把数据分为训练集、交叉验证集和测试集。
在这里插入图片描述
选择 λ \lambda λ的方法为:

  1. 使用训练集训练出12个不同程度正则化的模型
  2. 用12个模型分别对交叉验证集计算的出交叉验证误差
  3. 选择得出交叉验证误差最小的模型
  4. 运用步骤3中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上:
    在这里插入图片描述
    • 当 λ \lambda λ 较小时,训练集误差较小(过拟合)而交叉验证集误差较大
    • 随着 λ \lambda λ 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加

5. 神经网络的方差和偏差

在这里插入图片描述
使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。

通常选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。

对于神经网络中的隐藏层的层数的选择,通常从一层开始逐渐增加层数,为了更好地作选择,可以把数据分为训练集、交叉验证集和测试集,针对不同隐藏层层数的神经网络训练神经网络,然后选择交叉验证集代价最小的神经网络。

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

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

相关文章

2022年最新Android面试题整理,全网都在看,史上最全面试攻略

Android面试现在什么东西是必须考察的?专业素养还是面试技巧?四大组件还是Framework层源码?哪有什么必考的,可以说所有技术栈都不是必考,但又是必考。话虽看似矛盾,但却反映了当前国内互联网环境的现状&…

基于随机油漆优化器 (MOSPO)求解多目标优化问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

HTML刷题

HTML5 之前的版本是 HTML4.01 onblur 和 onfocus 属于焦点事件: onblur:失去焦点 onfocus:获取焦点 链接:为同一个文件添加多种文件格式的原因是什么 ?&l__牛客网 来源:牛客网 1.为同一个文件添…

vue提取字符串中中文汉字的大写首字母

vue提取字符串中中文汉字的大写首字母 1.需求背景 最近开发vue项目,在关于药品的项目中有个需求是要提取药品中文名称的首字母组成拼音码。 解决方案 这里需要用到pinyin-pro插件,参数介绍如下: 使用如下: // 1、安装piny…

OpenAI ChatGPT注册试用全攻略

OpenAI ChatGPT注册试用全攻略 最近ChatGPT很火,但是有人注册会经常出现不服务当前地区问题,现在手把手教你解决。 如何在中国试用ChatGPT? 这是ChatGPT给的回答 您好,ChatGPT是一种计算机程序,可以自动生成自然语…

C#大型外卖订单调度系统源码PC版 手机版 商户版

开发环境: VS2012 SQL2008R2 菜单功能 1、手机端功能模块 1)自动定位或者搜索地址:使用百度地图,实现自动定位,打开微信自动定位,搜索附件外卖商家 2)附近外卖商家展示&…

《痞子衡嵌入式半月刊》 第 31 期

痞子衡嵌入式半月刊: 第 31 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢…

后端存储实战课——高速增长篇

数据库超时 MySQL CPU 的利用率一直是 100% 的话,MySQL 基本属于不可用的状态,执行的 SQL 都会超时。 CPU 利用率高的情况,绝大多数是由于慢 SQL 引起的,可以通过分析慢 SQL 日志查找类似问题原因。由于数据库忙的时候&#xff…

深入学习Android

我通过阅读邓凡平前辈的《深入理解Android》,为了加深学习作此学习笔记。虽然是邓老师2011著的书,但其中的安卓框架还是可以学习的。另老师的csdn地址在:阿拉神农的博客_CSDN博客-Android开发系列,深入理解Android,移动万态领域博主tips:阅读…

如何进阶一名有竞争力的程序员?

前言 这段时间,又互联网寒冬了,你看消息满天飞。一瞬间,裁员的,辟谣的,很是热闹。这搞得我们程序员很难受,本来压力就大,还动不动有人在你耳边煽风点火制造恐慌。我想说:难道就不能…

[附源码]Python计算机毕业设计SSM教师信息采集系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

APISIX 在君润人力云原生平台的架构实践

讲师:袁鹏,一页科技架构师 摘要: 君润人力采用多套 Apache APISIX 集群来满足自研服务平台的功能需求。 君润人力成立于 2019 年,是一家以科技驱动的人力资源解决方案服务商,依托行业领先的科技水平和服务能力&#xf…

透视投影函数的图像

因为有个需求是判断线是否被视锥体裁切,因为NDC比较好判断是否裁切,所以研究了一下透视投影变换的函数图像。 从透视投影矩阵可以看出,在同一个z上,x,y都是线性的,所以这里主要研究z的变换函数图像。 我用的是Vulkan&a…

[附源码]Python计算机毕业设计SSM健身网站平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【SQL】锁机制

【SQL】锁机制锁的不同角度分类从数据操作的类型划分:读锁,写锁从数据操作的粒度划分:表级锁,页级锁,行锁表锁意向锁(intention lock)自增锁(AUTO-INC锁)元数据锁&#x…

Java --- Spring6对IoC的实现

目录 一、控制反转 二、依赖注入 三、set注入 四、构造注入 一、控制反转 1、控制反转是一种思想 2、控制反转是为了降低程序耦合度,提高程序扩展力,达到OCP原则,达到DIP原则。 3、控制反转主要有:①、将对象的创建权力交出去&#xff…

莱特飞行优化及其使用场景

莱特飞行优化及其使用场景 一,莱特飞行 但是产生一个莱特飞行分布的随机数是比较难的,莱特只给出了一个积分,所以后面就有人提出了如何制造这样分布的随机数。 Mantegna 在1994年提出的一种用正态分布求解随机数的方法,有时也叫…

nginx目录穿越漏洞(insecure-configuration)

该漏洞是由于配置错误导致的 漏洞原理:传送门 这个常见于Nginx做反向代理的情况,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理。 环境: vulhub靶场 进入nginx/insecure-configuration 运行docker-comp…

【编码】PHP中文路径问题详解

1. 问题 低版本的PHP可能会遇到不支持中文路径的情况: (1) require(‘http://localhost/中文路径/test.php’); (2) require(‘\中文路径\test.php’); (3) $file fopen(‘http://localhost/中文路径/test.php’); (4) $file fopen(‘\中文路径\test.php’);…

SpringCloud框架(一):环境搭建 生产和消费 RestTemplate,底层源码解读

环境搭建 生产和消费 RestTemplate,底层源码解读SpringCloud环境搭建:生产和消费 RestTemplateSpringCloud的服务调用SpringBootApplication业务调用方法一: 通过静态工厂去拿业务调用方法二: 通过注入依赖去拿Template的底层源码…