机器学习模型的过拟合与欠拟合
机器学习模型的训练过程中,可能会出现3种情况:模型欠拟合、模型正常拟合与模型过拟合。其中模型欠拟合与模型过拟合都是不好的情况。下面将会从不同的角度介绍如何判断模型属于哪种拟合情况。
(1)欠拟合与过拟合表现方式
欠拟合:欠拟合是指不能很好的从训练数据中,学习到有用的数据模式,从而针对训练数据和待预测的数据,均不能获得很好的预测效果。如果使用的训练样本过少,较容易获得欠拟合的训练模型。
正常拟合:模型的正常拟合是指训练得到的模型,可以从训练数据集上学习得到了泛化能力强、预测误差小的模型,同时该模型还可以针对待测试的数据进行良好的预测,获得令人满意的预测效果。
过拟合:过拟合是指过于精确地匹配了特定数据集,导致获得的模型不能良好地拟合其他数据或预测未来的观察结果的现象。模型如果过拟合,会导致模型的偏差很小,但是方差会很大。
上面的介绍可能不能直观的快速了解数据的三种拟合情况,下面分别介绍针对分类问题和回归问题,不同任务下的拟合效果,获得的模型对数据训练后的表示形式。针对二分类问题可以使用分界面,表示所获得的模型与训练数据的表现形式,图1表示三种情况下的数据分界面。

图1 分类问题的三种数据拟合情况
从图1可以发现:欠拟合的数据模型较为简单,因此获得的预测误差也会较大,而过拟合的模型则正相反,其分界面完美的将训练数据全部分类正确,获得的模型过于复杂,虽然训练数据能够百分百预测正确,但是当预测新的测试数据时会有较高的错误率。而数据正常拟合的模型,对数据的拟合效果则是介于欠拟合和过拟合之间,训练获得不那么复杂的模型,保证在测试数据集上的泛化能力。三种情况在训练数据集上的预测误差的表现形式为:欠拟合>正常拟合>过拟合;而在测试集上的预测误差形式为:欠拟合>过拟合>正常拟合。
针对回归问题,在对连续变量进行预测时,三种数据拟合情况可以使用图2来表示。三幅图分别表示对一组连续变量进行数据拟合时,可能出现的欠拟合、正常拟合与过拟合的三种情形。

图2 回归问题的三种数据拟合情况
很多时候面对高维的数据,很难可视化出分类模型的分界面与回归模型的预测效果,那么如何判断模型的拟合情况呢?针对这种情况,通常可以使用两种判断方案。第一种是,判断在训练集和测试集上的预测误差的差异大小,正常拟合的模型通常在训练集和测试集上的预测误差相差不大,而且预测的效果均较好;欠拟合模型在训练集和测试集上的预测效果均较差;过拟合模型则会在训练数据集上获得很小的预测误差,但是在测试集上会获得较大的预测误差。另一种方式,是可视化出模型在的训练过程中,三种不同的数据拟合情况,在训练数据和测试数据(或验证数据)上的损失函数变化情况,如图3所示。

图3三种数据拟合情况的损失函数变化情况
(2)避免欠拟合与过拟合的方法
实践过程中,如果发现训练的模型对数据进行了欠拟合或者过拟合,通常要对模型进行调整,解决这些问题是一个复杂综合的过程,而且很多时候要进行多项的调整,下面介绍一些可以采用的相关解决方法。
增加数据量:如果训练数据较少,通常可能会导致数据的欠拟合,也会发生在训练集上的过拟合问题。因此更多的训练样本通常会使模型更加的稳定,所以训练样本的增加不仅可以得到更有效的训练结果,也能在一定程度上调整模型的拟合效果,增强其泛化能力。但是如果训练样本有限,也可以利用数据增强技术对现有的数据集进行扩充。
合理的数据切分:针对现有的数据集,在训练模型时,可以将数据集进行切分为训练集、验证集和测试集(或者使用交叉验证的方法)。在对数据进行切分后,可以使用训练集来训练模型,并且通过验证集来监督模型的学习过程,也可以在网络过拟合之前提前终止模型的训练。在模型训练结束后,可以利用测试集来测试训练结果的泛化能力。
当然在保证数据尽可能的来自同一分布的情况下,如何有效的对数据集进行切分也很重要,传统的数据切分方法通常是按照60:20:20的比例拆分,但是针对数据量的不同,数据切分的比例也不尽相同,尤其在大数据时代,如果数据集有几百万甚至上亿级条目时,这种60:20:20比例的划分已经不再合适,更好的方式是将数据集的98%用于训练,保证尽可能多的样本接受训练,使用1%的样本用于验证集,这1%的数据已经有足够多的样本来监督模型是否过拟合,最后使用1%的样本测试网络的泛化能力。所以针对数据量的大小、网络参数的数量,数据的切分比例可以根据实际的需要来确定。
正则化方法:正则化方式是解决模型过拟合问题的一种手段,其通常会在损失函数上添加对训练参数的惩罚范数,通过添加的范数惩罚对需要训练的参数进行约束,防止模型过拟合。常用的正则化参数有L1和L2范数,范数惩罚项的目的是将参数的绝对值最小化,范数惩罚项的目的是将参数的平方和最小化。使用正则化防止过拟合非常有效,如在经典的线性回归模型中,使用L1范数正则化的模型叫做Lasso回归,使用L2范数正则化的模型叫做Ridge回归。
参考书籍:《Python机器学习算法与实战》——孙玉林,余本国 著
相关文章:
机器学习模型的过拟合与欠拟合
机器学习模型的训练过程中,可能会出现3种情况:模型欠拟合、模型正常拟合与模型过拟合。其中模型欠拟合与模型过拟合都是不好的情况。下面将会从不同的角度介绍如何判断模型属于哪种拟合情况。 (1)欠拟合与过拟合表现方式 欠拟合…...
华为OD机试真题-虚拟游戏理财-2023年OD统一考试(C卷)---Python3--开源
题目: 考察内容: for if max 代码: """ 题目分析:投资额*回报率投资回报 要在可接受范围内选择最优的投资方式获得最大回报最多投资2个理财产品输入: 产品数int; 总投资额int; 总风险int 产品投资…...
新手搭建服装小程序全攻略
随着互联网的快速发展,线上购物已经成为了人们日常生活中不可或缺的一部分。服装作为人们日常消费的重要品类,线上化趋势也日益明显。本文将详细介绍如何从零开始搭建一个服装小程序商城,从入门到精通的捷径,帮助你快速掌握小程序…...
设计模式学习笔记 - 面向对象 - 3.面向对象比面向过程有哪些优势?面向过程真的过时了吗?
简述 在过往的工作中,我发现很多人搞不清面向对象和面向过程的区别,总认为使用面向对象编程语言来开发,就是在面向面向对象编程了。而实际上,他们只是在用面向对象编程语言,编写面向过程风格的代码而已,并…...
联想开天昭阳N4620Z笔记本如何恢复出厂麒麟操作系统(图解)
联想开天昭阳N4620Z笔记本简单参数: 中央处理器:KX-6640MA G2 内存:8GB 固态硬盘:512GB SSD 显示器:14.0”FHD 电池:4Cell 操作系统:麒麟KOS中文RTM(试用版) 此款笔…...
Qt经典面试之理论总结(自己整理总结)
目录 1、QT信号和槽的原理和理解 2、connect函数的参数,第五个参数是什么 1、QT信号和槽的原理和理解 信号和槽机制底层是通过函数间的相互调用实现的。 信号函数和槽函数通常位于某个类中,和普通的成员函数相比,它们的特别之处在于&#…...
【YOLO系列算法人员摔倒检测】
YOLO系列算法人员摔倒检测 模型和数据集下载YOLO系列算法的人员摔倒检测数据集可视化数据集图像示例: 模型和数据集下载 yolo行人跌倒检测一: 1、训练好的行人跌倒检测权重以及PR曲线,loss曲线等等,map达90%多,在行人跌…...
获取淘宝商品详情API、商品主图、图片搜索api
获取淘宝详情API的方式有以下几种: 使用淘宝开放平台提供的接口:淘宝开放平台提供了多个API接口,让开发者可以通过接口获取商品详情信息。你可以到淘宝开放平台官网申请开发者账号,并查看相关接口文档,了解如何使用接…...
HarmonyOS创建一个ArkTS卡片
创建一个ArkTS卡片 在已有的应用工程中,创建ArkTS卡片,具体操作方式如下。 创建卡片。 根据实际业务场景,选择一个卡片模板。 在选择卡片的开发语言类型(Language)时,选择ArkTS选项,然后单…...
ChatGPT Plus遇到订阅被拒原因与解决方案
ChatGPT Plus被广泛认为相比普通版本更快、更强,并且能最先体验新功能。 很多小伙伴再订阅时遇到图片中的问题 错误提示包括这些: Your credit card was declined.Try paying with a debit card instead.您的信用卡被拒绝了。请尝试用借记卡支付。你的…...
UE蓝图 函数调用(CallFunction)节点和源码
系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 UE蓝图 函数调用(CallFunction)节点和源码 文章目录 系列文章目录一、Call…...
Vue单文件学习项目综合案例Demo,黑马vue教程
文章目录 前言一、小黑记事本二、购物车三、小黑记账清单 前言 bilibili视频地址 一、小黑记事本 效果图 主代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible&…...
机器视觉【3】非线性求解相机几何参数
线性求解相机几何参数的缺点 上一章节介绍学习了(DLT)线性求解相机几何参数,了解到线性求解法当中比较明显的缺点: 没有考虑到镜头畸变的影响不能引入更多的约束条件融入到DLT算法当中优化最关键的是,代数距离并不是…...
Qt编译报错:The slot requires more arguments than the signal provides.
编译时代码没有提示错误的地方,报错的地方在qt的文件,还以为什么莫名其妙的错误呢,原来就是连接的信号和槽函数参数不匹配,有个信号是没有参数的,但我的槽函数有个参数,然后就报错了。 改下槽函数的参数就…...
【Unity】提示No valid Unity Editor liscense found.Please active your liscense.
有两个软件,如果只有一个,点黑的不会有效果、、、、(楼主是这个原因,可以对号入座一下) 简而言之,就是去下载Unity Hub,再里面激活管理通行证 问题情境: 点击unity出现以下弹窗&a…...
如何在 Tomcat 中为 Web 应用程序启用和配置缓存?
在Tomcat中为Web应用程序启用和配置缓存通常涉及到对Tomcat的连接器(Connector)进行配置,以及可能的话,配置Web应用程序本身以支持缓存。 1. 配置Tomcat连接器以启用缓存 Tomcat的连接器可以通过其配置来启用各种…...
QEMU开发入门
1. 简介 QEMU(Quick EMUlator)是一个开源的虚拟化软件,它能够模拟多种硬件平台,并在这些平台上运行各种操作系统。QEMU可以在不同的主机架构之间进行虚拟化,例如x86、ARM、PowerPC、Risc-V等。QEMU是一个功能强大且灵…...
10-pytorch-完整模型训练
b站小土堆pytorch教程学习笔记 一、从零开始构建自己的神经网络 1.模型构建 #准备数据集 import torch import torchvision from torch.utils.tensorboard import SummaryWriterfrom model import * from torch.utils.data import DataLoadertrain_datatorchvision.datasets.…...
高级RAG:重新排名,从原理到实现的两种主流方法
原文地址:https://pub.towardsai.net/advanced-rag-04-re-ranking-85f6ae8170b1 2024 年 2 月 14 日 重新排序在检索增强生成(RAG)过程中起着至关重要的作用。在简单的 RAG 方法中,可以检索大量上下文,但并非所有上下…...
使用logicflow流程图实例
一.背景 需要使用流程引擎开发项目,没有使用flowable、activiti这类的国外流程引擎,想使用国内的引擎二次开发,缺少单例模式的流程画图程序,都是vue、react、angluer的不适合,从网上找了antx6、logicflow、bpmn.js。感…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
