模型选择、过拟合与欠拟合

一、训练误差与泛华误差

1、在训练时,我们关心的是泛化误差,也就是对新数据的预测

2、训练误差:模型在训练数据上的误差;泛化误差:模型在新数据上的误差

二、验证数据集与测试数据集

1、验证数据集:用于评估模型好坏的数据集,就像模拟考试

2、测试数据集:只用一次,就像正式考试

3、训练数据集:训练模型参数;对于训练数据集,我们会拿出一部分作为验证数据集,训练数据就像平时进行刷题

4、在实际中使用的测试数据集,其实来源于我们的验证数据集,所以验证数据集上得出来的超参数可能会在泛化误差之中虚高

三、K折交叉验证

1、没有足够多的数据时指无论什么情况下,训练数据都是越多越好。

2、对于k折,数据量大时可以将k取更小的值,数据量小时则反之

3、K折交叉验证误差做平均是为了超参数的选择

四、总结

五、过拟合与欠拟合

1、模型容量:拟合各种函数的能力,可以理解为模型的复杂程度,低就是简单模型,高就是复杂模型。复杂模型可以使用复杂函数,简单模型就不太行;比如线性模型就简单,多层感知机就比较复杂。

2、简单数据与复杂数据,简单数据比如人工数据集

3、简单数据高模型容量可能过拟合,就相当于模型将数据全部记下来了,包括很多噪音,对新数据没有泛化性;复杂数据使用简单模型应该会欠拟合,就是字面意思。

4、估计模型容量

(1)模型容量在不同种类的算法之间难以比较,比如树模型与神经网络之间的差别非常大

(2)给定模型种类,有两个因素估计模型容量:参数个数与参数选择范围

对于上图线性回归,输入为d维向量,自然就有d个权重w,参数就是d个w和一个偏差d;

对于有一层隐藏层的感知机,其中这一层输出位m维向量,最终输出层向量为k,按照线性模型反推,输入->隐藏层(d+1)*m,隐藏层->输出层(m+1)*k

(3)VC维:VC维度定义了在假设空间中能够被模型拟合的样本点的最大数量,例如二维空间的vc维是3,在多1个点,比如四个点就陷入了XOR问题,这里知道大概概念就好了。

支持N维输入的感知机的VC维是N+1;

一些多层感知机的VC维O(Nlog2N)

5、数据复杂度

(1)数据复杂度是一个相对概念,多样性指分为几类,比如softmax输出分成了许多类

(2)多个重要因素

6、总结

六、多项式生成数据集

max_degree = 20  # 多项式的最大阶数,除了前面四个其他都是属于噪音
n_train, n_test = 100, 100  # 训练和测试数据集大小
true_w = np.zeros(max_degree)  # 分配大量的空间
true_w[0:4] = np.array([5, 1.2, -3.4, 5.6])
#总计为200的训练和测试集
features = np.random.normal(size=(n_train + n_test, 1))
np.random.shuffle(features)
#生成了200个,多项式的样本相当于200*20
poly_features = np.power(features, np.arange(max_degree).reshape(1, -1))
#相当于除以阶乘
for i in range(max_degree):poly_features[:, i] /= math.gamma(i + 1)  # gamma(n)=(n-1)!
# labels的维度:(n_train+n_test,)
labels = np.dot(poly_features, true_w)
#添加噪声
labels += np.random.normal(scale=0.1, size=labels.shape)

七、模型进行训练和测试

1、评估模型在给定数据集上的损失的函数

def evaluate_loss(net, data_iter, loss):
...#跟之前的一样
return metric[0]/metric[1]

2、定义训练函数

train(train_features, test_features, train_labels, test_labels,num_epochs=400):
略,跟之前的一样

3、三阶多项式函数拟合(正常)

# 从多项式特征中选择前4个维度,即1,x,x^2/2!,x^3/3!
train(poly_features[:n_train, :4], poly_features[n_train:, :4],labels[:n_train], labels[n_train:])

4、线性函数拟合(欠拟合)

# 从多项式特征中选择前2个维度,即1和x
train(poly_features[:n_train, :2], poly_features[n_train:, :2],labels[:n_train], labels[n_train:])

5、高阶多项式函数拟合(过拟合)

# 从多项式特征中选取所有维度
train(poly_features[:n_train, :], poly_features[n_train:, :],labels[:n_train], labels[n_train:], num_epochs=1500)

6、总结

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

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

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

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

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

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

相关文章

Percona Toolkit 神器全攻略(配置类)

Percona Toolkit 神器全攻略(配置类) Percona Toolkit 神器全攻略系列共八篇,前文回顾: 前文回顾Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略(实用类) 全文约定:$为命令提示符、gr…

Spring Boot集成jsoup实现html解析

1.什么是jsoup jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据,可操作 HTML 元素、属性、文本。 JSo…

函数内部结构分层浅析(从MVC分层架构联想)

函数内部结构分层浅析(从MVC分层架构联想) 分层架构:一种将软件代码按不同功能进行划分的架构模式。 优点包括: 可维护性:各层职责明确,易于单独修改维护。 可扩展性:方便添加或修改某一层,不…

优化Java应用的日志记录方法

优化Java应用的日志记录方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 引言 在开发和维护Java应用程序时,良好的日志记录是确保应用稳定性和…

优化Java中网络通信的性能策略

优化Java中网络通信的性能策略 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代软件开发中,优化网络通信的性能是确保应用程序高效运行的关键…

Rocketmq在单节点情况下新增从节点

Rocketmq在单节点情况下新增从节点 在docker-compose部署rocketmq单节点的基础上,新增一个从节点 一,修改docker-compose配置文件 原docker-compose文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:server-4.5.2container_name: rm…

选择诊所管理系统的原则是什么?

如今,诊所管理系统已成为医疗机构提升管理效率、优化患者服务的重要工具。然而,市场上的诊所管理系统琳琅满目,功能各异,因此,如何选择一款适合自己诊所的管理系统,是许多诊所管理者需要思考的问题。下面&a…

进程调度的基本过程

文章目录 CPU执行指令过程进程PCB“分时复用” ☁️结语 CPU执行指令过程 一个CPU能执行那些指令,可以认为是cpu最初设计的时候就已经写死了。有一个“表格”描述了都有哪些指令。 以上的表格只是一个简化版本,真实的cpu指令表要复杂很多。此处假设每个…

RUC2024《综合设计》期中测试

T1 原题链接https://www.luogu.com.cn/problem/P1025 不是我出的 T2 原题链接:https://www.luogu.com.cn/problem/P26787 这道题就是讲过的二分贪心,先二分规定每两个点之间都必须大于等于某个值,然后依次枚举通过贪心求出最少需要删除的点数…

薄冰英语语法学习--名词2-格

名词后面 s,代表后面这个东西属于前面的。 比如toms book,汤姆的书。 末尾是s,那么直接在最后加就行了。比如boys,男孩们的 表示几个词共同 的所有关系在最后一个词的词尾加 sMary and Toms books 玛丽和汤姆共有的书表示几个词…

深入探讨C++的高级反射机制

反射是一种编程语言能力,允许程序在运行时查询和操纵对象的类型信息。它广泛应用于对象序列化、远程过程调用、测试框架、和依赖注入等场景。 由于C语言本身的反射能力比较弱,因此C生态种出现了许多有趣的反射库和实现思路。我们在本文一起探讨其中的奥秘…

DOM遍历

DOM 遍历是指在 HTML 文档中导航和定位元素的过程。通过 DOM 遍历,您可以在文档中移动并查找特定的元素,以便对其进行操作或者检索信息。 寻找子元素 //DOM遍历 const h1 document.querySelector(h1);//寻找子元素 console.log(h1.querySelectorAll(.…

每天一个数据分析题(三百九十)- 多元线性回归

在多元线性回归中,下列哪项可以缓解多重共线性问题? A. 取对数 B. 平方 C. 去除异常值 D. 逐步回归 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python,SQL&am…

从入门到精通:使用Python的Watchdog库监控文件系统的全面指南

从入门到精通:使用Python的Watchdog库监控文件系统的全面指南 引言Watchdog库概述核心组件工作原理 快速开始:设置Watchdog安装Watchdog创建一个简单的监控脚本设置和启动Observer 事件处理:如何响应文件系统的变化基本事件处理处理复杂的场景…

论文生成新纪元:探索顶尖AI写作工具的高效秘诀

在学术探索的征途中,AI论文工具本应是助力前行的风帆,而非让人陷入困境的漩涡。我完全理解大家在面对论文压力的同时,遭遇不靠谱AI工具的沮丧与无奈。毕竟,时间可以被浪费,但金钱和信任却不可轻弃。 作为一名资深的AI…

@Transactional(rollbackFor = Exception.class)注解

当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。 在项目中,Transactional(rollbackForException.class),如果类加了这个注解,那…

Java使用Graphics2D画图,画圆,矩形,透明度等实现

背景 如上图,需要使用Java生成一个图片, 并以base64编码的形式返回给前端展示。 使用Graphics2D类,来进行画图,其中需要画方框、原型、插入图标、写入文字等,同时需要设置透明度等细节点 环境:Jdk17&#…

Java面试八股之JVM内存泄漏按照发生的方式可以分为哪几类

JVM内存泄漏按照发生的方式可以分为哪几类 常发性内存泄漏(Frequent Memory Leak) 这类内存泄漏发生的代码会被频繁执行,每次执行时都会导致一块或多块内存无法被回收。由于泄漏行为重复发生,故称为常发性。这类泄漏通常比较容易…

下一代广域网技术2:SRv6

2.SRv6 SR架构设计之初,就为SR数据平面设计了两种实现方式:一种是SR-MPLS,其重用了MPLS数据平面,可以在现有IP/MPLS网络上增量部署;另一种是SRv6,使用IPv6数据平面,基于IPv6路由扩展头进行扩展…

Docker部署常见应用之Oracle数据库

文章目录 安装部署参考文章 安装部署 使用Docker安装Oracle数据库是一个相对简便的过程,可以避免在本地环境中直接安装Oracle数据库的复杂性。 安装Docker环境:确保你的系统上已经安装了Docker,并且Docker服务正在运行。具体的安装方法可以根…