【机器学习】P22 过拟合和欠拟合的探究2,高偏差与高方差

news2024/12/23 17:19:16

过拟合与欠拟合的探究2,高偏差与高方差

  • 高偏差和高方差
  • 过拟合与欠拟合的解决策略
  • 带有L2正则化的神经网络
  • 带有早停法的神经网络的完整案例 MINST

高偏差和高方差

高偏差和高方差是机器学习中常见的两个问题,会影响模型的性能。

高偏差(High Bias)指的是模型对真实数据的预测结果与真实结果之间存在较大的偏差,即预测结果偏离真实结果的程度较大。这种偏差可能是由于模型过于简单,无法拟合数据中的复杂模式或者因为特征提取不够充分等原因造成的。因此,这种偏差被称为高偏差。

高偏差带来的是模型的欠拟合(不仅是训练集而且是测试集)。这可能会导致训练数据和测试数据上的准确率都很低。

在这里插入图片描述

高方差(High Variance)则是指模型过于复杂,过拟合了训练数据,学习到的是数据中的噪声而不是基本模式。这可能会导致训练数据上的准确率很高,但在验证数据上、测试数据上表现不佳;如上图所示。

机器学习的目标是在偏差和方差之间找到平衡点,使模型能够很好地适应新数据。这可以通过选择适当的模型、优化超参数、使用正则化技术以及增加训练数据量来实现。所以说,并不是训练的准确度越高越好;而通常我们防止欠拟合(高偏差)和过拟合(高方差)的做法是在训练迭代中,持续监测训练集与验证集的准确度;

怎样的程度才会称为“高”偏差与“高”方差?

提出的其中一种办法是与人类的判断相对比,比如,人类判断相同数据集的准确率为0.92,但是训练集的准确率为 0.8,那么可以称为发生了欠拟合,即高偏差;而如果经过多次迭代,训练集的准确度已经达到 0.91,但是验证集缺很低,0.8,那么极有可能发生了过拟合,即高方差。


过拟合与欠拟合的解决策略

我们当然不希望发生过拟合或者欠拟合现象,那我们该怎么办去避免,或者怎样去解决我们的神经网络模型过拟合欠拟合问题?

  1. 增加数据量: 增加更多的数据有助于减少过拟合的风险,同时可以更好地训练模型,减少欠拟合的风险。

  2. 数据扩充: 通过对已有数据进行旋转、缩放、平移等操作,生成新的数据样本,从而增加数据量,降低模型的过拟合风险。处理图片的神经网络中应用比较多。

  3. 模型复杂度控制: 通过减少模型的层数、节点数等来控制模型的复杂度,减少过拟合的风险;同时,如果模型太简单,也会导致欠拟合的问题,需要适当增加模型复杂度。

  4. 正则化技术: 通过在损失函数中加入正则化项,常见正则化方法如L1正则化、L2正则化、弹性网络正则化、Dropout、早停法等技术,来限制模型的复杂度,减少过拟合的风险。
    见博文:【机器学习】P21 正则化 Regularization(L1正则化 Lasso、L2正则化 Ridge、弹性网络正则化、Dropout正则化、早停法)

  5. 交叉验证: 通过将数据集分成训练集和验证集,来评估模型的性能和泛化能力,并根据验证集的表现调整模型的参数,减少过拟合的风险。
    见博文:【机器学习】P20 模型的诊断 - 验证集

  6. 提前终止训练: 当模型在验证集上的表现停止改善时,提前终止训练,以避免过拟合的发生。提前终止训练也算为正则化技术之一,即早停法。
    同样见博文:【机器学习】P21 正则化 Regularization(L1正则化 Lasso、L2正则化 Ridge、弹性网络正则化、Dropout正则化、早停法)

  7. 集成学习: 通过将多个模型集成起来,如Bagging、Boosting等方法,来提高模型的泛化能力,减少过拟合的风险。这点后期再说。

我们通过综合采用上述方法,可以有效地防止神经网络的欠拟合和过拟合问题,提高模型的泛化能力和性能。


带有L2正则化的神经网络

L2正则化方法通过对模型的权重参数进行L2范数惩罚,使得权重参数变得更加平滑,避免出现过于极端的权重值,从而实现对过拟合问题的缓解;

有关于L2正则化的详情,见博文:【机器学习】P21 正则化 Regularization(L1正则化 Lasso、L2正则化 Ridge、弹性网络正则化、Dropout正则化、早停法)

其中带有L2惩戒的损失函数为:

J ( w , b ) = 1 2 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ j = 0 n − 1 w j 2 J(w,b)=\frac 1 {2m} \sum _{i=0} ^{m-1} (f_{w,b}(x^{(i)})-y^{(i)})^2+\frac {\lambda} {2m} \sum _{j=0} ^{n-1}w_j^2 J(w,b)=2m1i=0m1(fw,b(x(i))y(i))2+2mλj=0n1wj2

代码实现方法为:

layer_1 = Dense(units=25, activation="relu", kernel_regularizer=L2(0.01))
layer_2 = Dense(units=15, activation="relu", kernel_regularizer=L2(0.01))
layer_3 = Dense(units=1, activation="sigmoid", kernel_regularizer=L2(0.01))
model = Sequential([layer_1, layer_2, layer_3])

上述代码中,kernel_regularizer=L2(0.01) 的含义为采用 L2 正则化方法,其中 λ \lambda λ 的值为 0.01


带有早停法的神经网络的完整案例 MINST

早停法是一种正则化方法。其基本思想是:在模型训练过程中,每次训练我们计算模型在验证集上的误差,如果验证误差开始增加,则停止训练,否则继续训练。

但是需要注意的是,一般来说,并不是验证误差开始上升,就立即停止训练。反而,如果验证误差的上升非常缓慢,并且当前的验证误差仍然比之前的最小值小很多,那么我们通常会允许模型继续训练一段时间,以便模型进一步优化,而不是立即停止训练。

具体详情见博文:见博文:【机器学习】P21 正则化 Regularization(L1正则化 Lasso、L2正则化 Ridge、弹性网络正则化、Dropout正则化、早停法)

带有早停法实现手写识别的代码:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.datasets import mnist

# 加载数据集并进行预处理
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 定义模型
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

# 定义损失函数和优化器
loss_fn = keras.losses.SparseCategoricalCrossentropy()
optimizer = keras.optimizers.Adam()

# 定义早停法
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)

# 训练模型
model.compile(optimizer=optimizer, loss=loss_fn, metrics=['accuracy'])
history = model.fit(x_train, y_train, epochs=50, validation_data=(x_test, y_test), callbacks=[early_stop])

from sklearn.metrics import accuracy_score
import numpy as np

# 测试集数据
pred_y = model.predict(x_test)
pred_labels = np.argmax(pred_y, axis=1)
acc = accuracy_score(y_test, pred_labels)
print('Test accuracy:', acc)

更多比如通过Dropout正则化方法防止过拟合欠拟合,见博文:【机器学习】P21 正则化 Regularization(L1正则化 Lasso、L2正则化 Ridge、弹性网络正则化、Dropout正则化、早停法)

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

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

相关文章

MySQL数据库,聚合查询

目录 1、聚合查询 1.1聚合函数 1.1.1count函数 1.1.2sum函数 1.1.3avg函数 1.1.4max函数 1.1.5min函数 1.2group by子句 1.3having 1、聚合查询 1.1聚合函数 聚合函数查询又叫函数查询,它是通过一些特定的函数根据需求来查询相关的信息,常见的…

代码随想录|day52| 动态规划part13● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

300 最长递增子序列 链接&#xff1a;力扣 看了思路之后写的代码&#xff0c;不知道为什么报错了。 错误一&#xff1a; int nnums.size();vector<int>dp(n,0);dp[0]1;for(int i1;i<n;i){for(int j0;j<i;j){if(nums[i]>nums[j]){dp[i]max(dp[i],dp[j]1);}}}retu…

Java版本企业电子招投标采购系统源代码——功能模块功能描述+数字化采购管理 采购招投标

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…

ChatGPT 聊天接口API 使用

一、准备工作 1.准备 OPENAI_ACCESS_TOKEN 2.准备好PostMan 软件 二、测试交流Demo 本次使用POSTMAN工具进行快速测试&#xff0c;旨在通过ChatGPT API实现有效的上下文流。在测试过程中&#xff0c;我们发现了三个问题&#xff1a;    1.如果您想要进行具有上下文的交流&…

【prettier Error resolving prettier configuration for x:\xxx\.prettierrc.js】

Prettier Error resolving prettier configuration for x:\xxx.prettierrc.js 解决方法 Prettier 出现如下错误 错误 内容内联代码片 Error resolving prettier configuration for d:\map\user_package\Leaflet.FileLayer-master\.prettierrc.js ["ERROR" - 10:38…

Facebook、Google、亚马逊,谁将成为跨境电商的营销宠儿?

跨境电商在全球范围内的发展日益迅猛&#xff0c;而营销渠道的选择也变得越来越多样化。在众多的广告平台中&#xff0c;Facebook、Google和亚马逊被公认为是跨境电商卖家们最主要的营销平台。那么&#xff0c;这三个平台中哪个会成为跨境电商的营销宠儿呢&#xff1f; 一、Fac…

自动驾驶——智能底盘构造详解及新发展

摘要&#xff1a; 汽车底盘是指汽车上由传动系统、行驶系统、转向系统和制动系统等部分的组合&#xff0c;其功能包括支承、安装汽车车身、发动机及其它各部件及总成&#xff0c;形成汽车的整体造型&#xff0c;承受发动机动力&#xff0c;保证车辆正常行驶等。 底盘构造介绍 …

摄像头/视频读取_写入

摄像头/视频读取_写入 ➢VideoCapture类: 使用 OpenCV 播放视频&#xff0c;几乎与使用它来显示图像一样容易。播放视频时只需要处理的新问题就是如何循环地顺序读取视频中的每一顿&#xff0c;以及如何从枯燥的电影视频的读取中退出该循环操作。具体如例如下&#xff1a; #…

【计算机架构】如何计算 CPU 动态功耗

&#x1f4dc; 本章目录&#xff1a; 0x00 动态功耗&#xff08;Dynamic Power&#xff09; 0x01 集成电路成本&#xff08;Integrated Circuit Cost&#xff09; 0x02 基准测试&#xff08;SPEC CPU Benchmark&#xff09; 0x03 SPEC功率基准测试&#xff08;SPEC Power B…

vs2022下配置zxing cpp环境

生成zxing 下载zxing&#xff0c;zxing-cpp-master https://github.com/zxing-cpp/zxing-cpp Cmake生成项目&#xff0c;点Generate&#xff0c;把OpenCV_DIR修改了&#xff0c;NameValue没有报红就点Generate。然后点Open Project打开项目。 打开项目后&#xff0c;右击解决…

赋值法写基础解系中解向量

赋值法写基础解系中解向量 &#xff08;一&#xff09;背景引入 通常解方程组时&#xff0c;将系数矩阵化为行阶梯型&#xff0c;进而可化为行最简型 &#xff08;说一嘴&#xff1a;行最简型是指阶梯口元素全是1&#xff0c;该1所在列全其余全为0&#xff1b;广义行阶梯的阶梯…

maven作用讲解---以及怎么配置阿里的maven镜像

目录 Maven介绍 传统的java项目的结构和maven的对比 传统 Maven的项目 如何配置阿里 maven 2. 修改 Maven介绍 传统的java项目的结构和maven的对比 传统 Maven的项目 如何配置阿里 maven (1) 把 D:\program\JavaIDEA 2020.2\plugins\maven\lib\maven3\conf\settings.xml…

DNS服务

DNS服务 使用背景 在日常生活中人们习惯使用域名访问服务器&#xff0c;但机器间互相只认IP地址&#xff0c;域名与IP地址之间是多对一的关系&#xff0c;一个ip地址不一定只对应一个域名&#xff0c;且一个完整域名只可以对应一个ip地址&#xff0c;它们之间的转换工作称为域…

锐捷常用命令

所有交换机和无线控制器开启SSH服务&#xff0c;用户名密码分别为admin、admin1234&#xff1b;密码为明文类型,特权密码为admin 以S5为例&#xff1a; S5(config)#enable service ssh-server S5(config)#username admin password admin123 S5(config)#line vty 0 4 S5(co…

【C++ 十】STL基本概念、STL六大组件、STL容器、STL算法、STL迭代器

STL 的诞生、STL 基本概念、STL 六大组件、STL 容器、STL 算法、STL 迭代器 文章目录 STL 的诞生、STL 基本概念、STL 六大组件、STL 容器、STL 算法、STL 迭代器前言1 STL 的诞生2 STL 基本概念3 STL 六大组件4 STL 中容器、算法、迭代器5 容器算法迭代器初识5.1 vector 存放内…

vue2数据响应式原理(4) 递归侦测对象所有属性,解密vue响应式对象__ob__是干什么的

我们上文写的这个方法 并不能很好的侦测对象所有的属性 或者说 不能比较简介的侦测所有属性 在实际业务中 对象里面套对象 也不是什么很少见的事 例如这样 这种 我们用上一种方法 就很麻烦了 所以 我们需要了解新的方法 要完成完整的属性监听 我们就需要一个工具类 这个类的…

js+css实现简单的弹框动画

效果图 只是一个简单的演示demo&#xff0c;但是可以后面可以优化样式啥的 刚开始元素的display为none&#xff0c;然后&#xff0c;为了给元素展示时添加一个动画&#xff0c;首先要添加样式类名show&#xff0c;让它覆盖display:none&#xff0c;变得可见。然后&#xff0c;添…

Day951.认知负载 -遗留系统现代化实战

认知负载 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于认知负载的内容。 一、怎样理解认知负载&#xff1f; 作为开发人员&#xff0c;不管是不是工作在遗留系统上&#xff0c;一定面临过来自业务方或项目经理的灵魂拷问&#xff1a; 为什么这个需求这么简单&…

车载网络 - Autosar网络管理 - 跳转状态

四、Autosar网络管理跳转状态 网络模式对应报文状态 Autosar网络管理报文各个状态对应的网络管理报文和应用报文的发送和接收状态。 网络模式 网络管理报文 应用报文 收发类型 发送报文 接收报文 发送报文 接收报文 总线睡眠模式(BSM) No Yes No NA 准备总线睡眠模…

探索Whisper语音识别

问题一&#xff1a;python多版本切换 背景&#xff1a;有了anaconda环境 还有一个c盘的不知道什么东西 我准备下载一个python3.9.9 去官网 然后安装&#xff0c;安装之前一定要把原来的python卸载干净。 3.9.9安装不上&#xff0c;我用3.10 切换的话&#xff0c;就是去环境…