pytorch学习——模型选择

news2024/11/18 14:55:23

一.概念

        模型选择是机器学习中的重要环节,它涉及到从各种统计,机器学习或深度学习模型中选取最佳模型的过程。这涉及到许多关键概念,包括偏差与方差,过拟合与欠拟合,训练误差和泛化误差,交叉验证,正则化,以及不同的模型选择标准。

1.1欠拟合与过拟合

        欠拟合和过拟合是机器学习中经常遇到的两个问题,它们都是模型的训练结果不理想导致的。

1.1.1欠拟合

        指模型无法学习到数据的有效特征,无法很好地拟合训练数据集。

        这种情况通常发生在模型的复杂度较低,或者训练数据集过小的情况下。欠拟合的表现是模型在训练集和测试集上都表现不佳,误差较高,无法准确预测新数据。解决欠拟合的方法一般是增加模型的复杂度,如增加模型的层数、增加神经元数量、引入更多的特征等。

1.1.2过拟合

        指模型过于复杂,过分关注训练数据集中的噪声或随机误差,导致在训练数据集上表现很好,但在测试数据集上表现不佳,无法泛化到新的数据。(相当于只记住了训练集的内容)

        过拟合的表现是模型在训练集上表现很好,但在测试集上误差很大,可能会出现过度拟合训练集的现象,如拟合训练集中的噪声数据。解决过拟合的方法一般是增加训练数据集的大小,或者使用正则化等技术限制模型的复杂度,如L1正则化、L2正则化、Dropout等。

1.1.3示例

1.2 训练误差与泛化误差

        训练误差和泛化误差是机器学习中常用的两个误差指标,用于衡量模型在训练集和测试集上的性能表现。在模型选择和优化中,我们需要平衡训练误差和泛化误差,以获得更好的模型性能。

1.2.1训练误差

        训练误差(Training Error):是模型在训练集上的误差,也称为经验误差。它是指模型在训练数据集上的预测结果与实际结果之间的差异。训练误差越小,说明模型在训练集上的表现越好,能够更准确地预测训练集中的数据。

1.2.2泛化误差

        泛化误差(Generalization Error):是模型在测试集上的误差,也称为测试误差。它是指模型对于新数据的预测能力,即模型在未见过的数据集上的表现。泛化误差越小,说明模型在新数据上的表现越好,能够更准确地预测未知数据。

1.2.3总结

        一个好的模型应该在训练集和测试集上都能够表现良好,即训练误差和泛化误差都要尽可能地小。但是实际上,当模型过于复杂时,可能会出现在训练集上表现很好,但在测试集上表现不佳的情况,即过拟合问题。解决过拟合问题的方法包括增加训练数据集的大小、使用正则化等技术限制模型的复杂度。

1.2.4与偏差和方差的区别和联系

        训练误差和泛化误差与偏差和方差是相关概念,但并不完全相同。

        训练误差和泛化误差是指模型在训练集和测试集上的表现,分别用于衡量模型的拟合能力和泛化能力。训练误差主要反映了模型对训练数据的拟合程度,泛化误差则反映了模型对未知数据的预测能力。我们希望模型能够在训练集和测试集上都表现良好,即训练误差和泛化误差都要尽可能小。

        偏差和方差是指模型的预测结果与真实结果之间的差异,用于描述模型的复杂度和拟合能力。偏差度量模型的拟合能力,即模型对真实关系的逼近程度;方差度量模型的稳定性,即模型对数据中噪声的敏感程度。过高的偏差意味着模型欠拟合,过高的方差意味着模型过拟合。我们希望找到一个偏差和方差都适中的模型,以达到最佳的预测效果。

        在机器学习中,偏差和方差与训练误差和泛化误差的关系密切。偏差较高的模型通常在训练集和测试集上都表现不佳,即训练误差和泛化误差都较高;方差较高的模型通常在训练集上表现较好,但在测试集上表现不佳,即训练误差较低,但泛化误差较高。因此,我们需要在偏差和方差之间寻找平衡,以获得最佳的模型性能。

1.3验证数据集和测试数据集

1.3.1验证数据集

        验证数据集(Validation Set):在模型训练过程中,我们通常需要对模型进行调参,即调整模型的超参数以达到最佳的性能。训练集用于训练模型,验证集用于评估模型的性能表现和调整超参数。验证数据集通常是从训练数据集中划分出来的,大小通常为训练数据集的10%~30%。

1.3.2测试数据集

        在训练结束后,我们需要对模型进行最终的评估和验证,以评估模型的泛化能力。训练集用于训练模型,验证集用于调整超参数,测试集用于最终的评估和验证。测试数据集通常是从原始数据集中划分出来的,大小通常为原始数据集的10%~30%。

 

1.4交叉验证

        交叉验证是一种评估模型性能和进行模型选择的常用方法。它将数据集划分为k个子集,然后通过将模型在k-1个子集上进行训练,并在剩余的子集上进行测试,来估计模型的性能。这个过程重复k次,每次使用不同的子集进行测试。然后,将这k次测试的结果取平均,以得到更稳定、可靠的模型性能估计。

1.5正则化

        正则化是一种用于防止过拟合的技术,它通过在模型的损失函数中添加一个惩罚项来限制模型的复杂度。

        正则化的基本思想是在优化模型的损失函数时,除了最小化训练误差之外,还要最小化正则项,以平衡模型的拟合能力和泛化能力。正则化的一般形式为L1正则化和L2正则化。

  1. L1正则化(L1 Regularization):也称为Lasso正则化,它通过在损失函数中添加L1范数的正则项,来限制模型系数的大小,从而使得某些参数变为0,达到特征选择的目的。L1正则化可以帮助我们提取重要的特征,减少特征数量,避免过拟合。

  2. L2正则化(L2 Regularization):也称为Ridge正则化,它通过在损失函数中添加L2范数的正则项,来限制模型系数的平方和,从而使得模型的参数值更加平滑,避免过拟合。L2正则化可以帮助我们缓解特征之间的共线性问题,提高模型的泛化能力。

 二.模型选择

        模型选择的目标是在给定的数据集上找到一个性能最好的模型,同时避免过度拟合。在机器学习中,我们通常在评估几个候选模型后选择最终的模型。 这个过程叫做模型选择

2.1模型复杂度对欠拟合和过拟合的影响

        模型复杂度对模型的性能和泛化能力有很大的影响。如果模型过于简单,则可能无法对数据进行很好的拟合,出现欠拟合问题;如果模型过于复杂,则可能对训练数据过度拟合,出现过拟合问题。因此,我们需要在模型复杂度和模型泛化能力之间寻找平衡点,以获得最佳的模型性能。

 

 

        在实际应用中,我们通常使用交叉验证等方法来评估模型的性能和泛化能力,并选择最佳的模型复杂度。对于某些特定的应用场景,例如处理小规模数据集或对模型复杂度要求较高的场景,我们可能需要使用较简单的模型来避免过拟合问题。

 2.2示例——多项式回归

实际操作和代码见链接

4.4. 模型选择、欠拟合和过拟合 — 动手学深度学习 2.0.0 documentation

2.3小结

  • 欠拟合是指模型无法继续减少训练误差。过拟合是指训练误差远小于验证误差。

  • 由于不能基于训练误差来估计泛化误差,因此简单地最小化训练误差并不一定意味着泛化误差的减小。机器学习模型需要注意防止过拟合,即防止泛化误差过大。

  • 验证集可以用于模型选择,但不能过于随意地使用它。

  • 我们应该选择一个复杂度适当的模型,避免使用数量不足的训练样本。

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

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

相关文章

【Linux下6818开发板(ARM)】硬件空间挂载

(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…

HTML基础知识点总结

目录 1.HTML简介 2.HTML基础结构 主要字符: 3.基础知识 (一)p标签 (二)hr标签 (三)尖角号 (四)版权号 (五)div和span div span (六)列表 (1&…

Python爬虫实战(进阶篇)—6获取微某博信息(附完整代码)

转眼将就来到了我们爬虫基础课的第 6 节课,今天我们来获取微某博信息来进行阅读学习! PS前面几节课的内容在专栏这里,欢迎大家考古:点我 首先第一步我们先登录一下微x博:点我 点击左上角的搜索框,找到你想获取的用户: 大家可以看到这里有两种搜索方式: 1、按照关键字…

linux+Jenkins+飞书机器人发送通知(带签名)

文章目录 如何使用在linux 上安装python 环境发送消息python脚本把脚本上传倒linux上 jenkins 上执行脚本 如何使用 自定义机器人使用指南飞书官网https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot 在linux 上安装python 环境 yum install python3 python…

Skin Shader 使用自动生成的Thickness

Unity2023.2的版本,Thickness 自动化生成,今天测试了一把,确实不错。 1.Render 设置 在Project Settings->Graphics->HDRP Global Settings中 Frame Setting->Rendering->Compute Thickness 打开 2.Layer设置 2.1添加Layer&…

python基本知识学习

一、输出语句 在控制台输出Hello,World! print("Hello,World!") 二、注释 单行注释:以#开头 # print("你好") 多行注释: 选中要注释的代码Ctrl/三单引号三双引号 # print("你好") # a1 # a2 print("Hello,World!&…

【c语言进阶】字符函数和字符串函数知识总结

字符函数和字符串函数 前期背景求字符串长度函数strlen函数strlen函数三种模拟实现 长度不受限制的字符串函数strcpy函数strcpy函数模拟实现strcat函数strcat函数模拟实现strcmp函数strcmp函数模拟实现 长度受限制的字符串函数strncpy函数strncpy函数模拟实现strncat函数strnca…

推理和训练

监督学习与非监督学习 Supervised Learning有监督式学习: 输入的数据被称为训练数据,一个模型需要通过一个训练过程,在这个过程中进行预期判断,如果错误了再进行修正,训练过程一直持续到基于训练数据达到预期的精确性。其关键方法…

【Python机器学习】实验04(2) 机器学习应用实践--手动调参

文章目录 机器学习应用实践1.1 准备数据此处进行的调整为:要所有数据进行拆分 1.2 定义假设函数Sigmoid 函数 1.3 定义代价函数1.4 定义梯度下降算法gradient descent(梯度下降) 此处进行的调整为:采用train_x, train_y进行训练 1.5 绘制决策边界1.6 计算…

echarts遇到的问题

文章目录 折线图-区域面积图 areaStyley轴只有整数y轴不从0开始y轴数值不确定,有大有小,需要动态处理折线-显示label标线legend的格式化和默认选中状态x轴的lable超长处理x轴的相关设置 echarts各个场景遇到的问题 折线图-区域面积图 areaStyle areaStyl…

【JVM】JVM五大内存区域介绍

目录 一、程序计数器(线程私有) 二、java虚拟机栈(线程私有) 2.1、虚拟机栈 2.2、栈相关测试 2.2.1、栈溢出 三、本地方法栈(线程私有) 四、java堆(线程共享) 五、方法区&…

微信小程序 居中、居右、居底和横向、纵向布局,文字在图片中间,网格布局

微信小程序居中、居右、横纵布局 1、水平垂直居中(相对父类控件)方式一:水平垂直居中 父类控件: display: flex;align-items: center;//子控件垂直居中justify-content: center;//子控件水平居中width: 100%;height: 400px //注意…

go 查询采购单设备事项[小示例]V2-两种模式{严格,包含模式}

第一版: https://mp.csdn.net/mp_blog/creation/editor/131979385 第二版: 优化内容: 检索数据的两种方式: 1.严格模式--找寻名称是一模一样的内容,在上一个版本实现了 2.包含模式,也就是我输入检索关…

ps 给衣服换色

可以通过色相饱和度来改变颜色 但如果要加强对比 可以通过色阶或曲线来调整 针对整体 调整图层-色相/饱和度 着色 给整个画面上色 选区-遮罩-取出来 然后调整图层-色相/饱和度也可以 或者以有图层-色相饱和度后 选区 按ctrli使其遮罩 同时按alt鼠标左键单机 ctrli反相…

【SSM—SpringMVC】 问题集锦(持续更新)

目录 1.Tomcat启动,部署工件失败 1.Tomcat启动,部署工件失败 解决:使用SpringMVC,添加Web支持,要将项目结构进行添加WEB-INF下添加lib目录,将依赖添进去

解锁 Kotlin 中密封类(Seal Class)的能力:设计模式与代码组织的优化

解锁 Kotlin 中密封类(Seal Class)的能力:设计模式与代码组织的优化 多年来,我参与了多个项目,深知编写清晰、易维护代码的价值。最近在一个涉及大量数据类型处理的项目中,我发现使用密封类极大地提高了数据的组织和管理效率。此…

推动中小企业数字化转型,开利网络签约

随着数字经济的发展,大数据、区块链、物联网、AI等新兴数字化技术已成为一种趋势,对于产业园区而言,结合数字化技术形成的“数字园区”理念正逐渐出现在公众视野中。什么是“数字园区”?简单来说,通过对产业园区进行数…

<C语言> 动态内存管理

1.动态内存函数 为什么存在动态内存分配? int main(){int num 10; //向栈空间申请4个字节int arr[10]; //向栈空间申请了40个字节return 0; }上述的开辟空间的方式有两个特点: 空间开辟大小是固定的。数组在申明的时候,必须指定数组的…

使用RunnerGo来简化测试流程

在软件开发过程中,测试是一个重要的环节,需要投入大量时间和精力来确保应用程序或网站的质量和稳定性。但是,随着应用程序变得更加复杂和庞大,传统的测试工具在面对比较繁琐的项目时非常费时费力。这时,一些自动化测试…

MAC电脑设置charles,连接手机的步骤说明(个人实际操作)

目录 一、charles web端设置 1. 安装charles之后,先安装证书 2. 设置 Proxy-Proxy Settings 3. 设置 SSL Proxying 二、手机的设置 1. 安卓 2. ios 资料获取方法 一、charles web端设置 1. 安装charles之后,先安装证书 Help-SSL Proxying-Inst…