如何通过绘制【学习曲线】来判断模型是否【过拟合】

news2024/9/30 17:22:48

      学习曲线是一种图形化工具,用于展示模型在训练集和验证集(或测试集)上的性能随着训练样本数量的增加而如何变化。它可以帮助我们理解模型是否受益于更多的训练数据,以及模型是否可能存在过拟合或欠拟合问题。学习曲线的x轴通常是训练样本的数量或训练迭代的次数,y轴是模型的性能指标,如准确率或损失函数的值。

- 如果模型在训练集上的性能随着训练样本数量的增加而提高,但在验证集上的性能提高不明显或者甚至下降,那么模型可能存在过拟合问题。
- 如果模型在训练集和验证集上的性能都随着训练样本数量的增加而提高,且两者的性能都还有提升的空间,那么模型可能会从更多的训练数据中受益。
- 如果模型在训练集和验证集上的性能都随着训练样本数量的增加而提高,但两者的性能提升已经很小或者没有提升,那么模型可能存在欠拟合问题,或者已经达到了它的性能上限。

在这里,我们以贝叶斯算法为例:

我们先来导入相应的库:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_digits
from sklearn.model_selection import learning_curve #画学习曲线的类
from sklearn.model_selection import ShuffleSplit #设定交叉验证模式的类

接下来定义一个绘制学习曲线的函数:

def plot_learning_curve(estimator,title, X, y, 
                        ax, #选择子图
                        ylim=None, #设置纵坐标的取值范围
                        cv=None, #交叉验证
                        n_jobs=None #设定索要使用的线程
                       ):
    train_sizes, train_scores, test_scores = learning_curve(estimator, X, y
                                                            ,cv=cv,n_jobs=n_jobs)    
    ax.set_title(title)
    if ylim is not None:
        ax.set_ylim(*ylim)
    ax.set_xlabel("Training examples")
    ax.set_ylabel("Score")
    ax.grid() #显示网格作为背景,不是必须
    ax.plot(train_sizes, np.mean(train_scores, axis=1), 'o-'
            , color="r",label="Training score") # 画出训练集学习曲线
    ax.plot(train_sizes, np.mean(test_scores, axis=1), 'o-'
            , color="g",label="Test score") # 画出验证集学习曲线
    ax.legend(loc="best")
    return ax

这段代码使用了`learning_curve`函数,该函数是一个非常有用的工具,用于生成学习曲线的数据。学习曲线可以帮助我们理解随着训练样本数量的增加,模型的性能如何变化。

`learning_curve`函数的参数包括:

- `estimator`:这是用于训练的模型。
- `X`和`y`:这是用于训练的数据和对应的标签。
- `cv`:这是交叉验证的策略。
- `n_jobs`:这是用于计算的线程数。

`learning_curve`函数返回三个值:

- `train_sizes`:这是用于生成学习曲线的训练集的样本数。
- `train_scores`:这是在每个训练集大小下,模型在训练集上的得分。
- `test_scores`:这是在每个训练集大小下,模型在交叉验证集上的得分。

这些返回的值可以用于绘制学习曲线,以帮助我们理解模型随着训练样本数量的增加,其性能如何变化。

接下来再导入手写数据集:

digits = load_digits()
X, y = digits.data, digits.target

再用如下代码绘制子图和学习曲线:

fig, axes = plt.subplots(1, 1, figsize=(10, 6))  # Define the axes variable
cv = ShuffleSplit(n_splits=50, test_size=0.2, random_state=0)
plot_learning_curve(GaussianNB(), "Naive Bayes", X, y,  ax=axes, ylim=[0.7, 1.05], n_jobs=4, cv=cv)
plt.show()

结果分析:可以看出贝叶斯作为一个分类器,效果不是很理想。可以观察到,随着样本量逐渐增大,训练分数逐渐降低,从95%下降到85%,但是测试分数逐渐增高,从75%上升到85%。测试分数在逐渐逼近训练分数,过拟合问题在逐渐减弱。但是,可以想象,接下来即使再增大样本量,测试分数和训练分数也不会变高,只会趋近于某个值。综上所述,朴素贝叶斯是依赖于训练集准确率的下降,测试集准确率上升来解决过拟合问题。

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

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

相关文章

Win11开始菜单怎么改成经典模式-Win11切换Win10风格开始菜单方法

Win11切换Win10风格开始菜单方法 方法一: 1. 在Win11电脑上下载一个“Startallback”软件,下载安装完成后,在“控制面板”里打开该软件。 2. 打开后,在“欢迎界面”,选择使用“Windows10主题样式”并重启电脑即可。…

CodeWave智能开发平台--03--目标:应用创建--06变量作用域和前后端服务逻辑

摘要 本文是网易数帆CodeWave智能开发平台系列的第08篇,主要介绍了基于CodeWave平台文档的新手入门进行学习,实现一个完整的应用,本文主要完成06变量作用域和前后端服务逻辑 CodeWave智能开发平台的08次接触 CodeWave参考资源 网易数帆Co…

使用C#发送邮箱验证码

使用C#发送邮箱验证码 在很多应用程序中,我们需要使用邮箱来进行用户身份验证。其中一种常见的方式是通过发送验证码到用户的邮箱,然后要求用户输入该验证码进行验证。本文将介绍如何使用 C# 发送邮箱验证码。 声明 验证码登录没有用任何的工具&#…

Linux22.04系统安装显卡驱动,cuda,cudnn流程

1. 安装显卡驱动 ubuntu-drivers deices显示所有适配显卡的驱动型号,recommended为推荐安装 安装 sudo apt install nvidia-driver-440重启 sudo reboot验证 nvidia-smi2. 安装cuda 在 CUDA Toolkit 的下载页面选择系统版本和安装方式,下载并运行…

Vue基础知识三

一 VUE脚手架 1.1 说明 Vue 脚手架是 Vue 官方提供的标准化开发工具(开发平台)。脚手架最新的版本是 4.x(脚手架版本与vue版本无关,我们这里使用脚手架的版本是4.x)。文档: https://cli.vuejs.org/zh/。 脚手架官网…

使用Spring Cache优化数据库访问

使用Spring Cache优化数据库访问 在这篇博客中,我们将学习如何使用Spring Cache来优化数据库访问,提高系统性能。我们将创建一个简单的图书管理应用作为示例,并演示如何通过缓存减少对数据库的频繁查询。 1. 项目结构 首先,我们…

【影刀RPA_如何使用影刀的企业微信指令?】

思路:先用python代码过一遍,再将必要参数填到指令里面。 第一步: 1、在企业微信后台新建应用,设置消息接收地址(需要服务器的公网ip地址),进行签名验证。然后,从浏览器中查询ip地址…

LabVIEW在指针式仪表读数中的应用

在LabVIEW环境中,为实现指针式仪表的自动读数,首先进行图像预处理,包括图像缩放、灰度化和二值化,以提高处理速度和减少噪声干扰。利用LabVIEW的图像处理功能,灰度化和二值化操作简化了图像的色彩信息,便于…

Open3d GUI 之对话框

文章目录 对话框关闭对话框文件对话框 Open3d快速上手💎 点云对象详解 对话框 open3d中的对话框用gui.Dialog来实现,但这个对话框其实只有个框,并没有对话,需要人为地进行布局规划。 如果单纯地希望演示一下对话框,…

完美版视频网站模板 – 苹果CMS v10大橙子vfed主题

源码下载: https://download.csdn.net/download/m0_66047725/88700504 这次提供的大橙子 vfed 模板 已经完美,只去除了授权验证和正版主题神秘后门,不影响任何功能体验性。主题优化:全站响应式自带主题设置面板自带联盟资源库大全…

《MySQL系列-InnoDB引擎06》MySQL锁介绍

文章目录 第六章 锁1 什么是锁2 lock与latch3 InnoDB存储引擎中的锁3.1 锁的类型3.2 一致性非锁定读3.3 一致性锁定读3.4 自增长与锁3.5 外键和锁 4 锁的算法4.1 行锁的三种算法4.2 解决Phantom Problem 5 锁问题5.1 脏读5.2 不可重复读5.3 丢失更新 6 阻塞7 死锁 第六章 锁 开…

【亚马逊云科技】使用Helm 3为Amazon EKS部署Prometheus+Grafana监控平台

文章目录 1. 创建Kubernetes命名空间2. 添加Prometheus社区helm chart3. 安装prometheus4. 检查Prometheus Pod运行状况5. 检查Prometheus Service部署情况6. 修改服务访问端口类型7. 访问Prometheus数据收集情况8. 访问Grafana9. 设置数据源10. 查看Kubernetes各类性能可视化参…

初中数学:几何题的相关解题原则总结

一、多问类型的几何题 我们做题,应该都遇到过这类几何题目,就是,三个小问,每个小问对应一个几何图像,而且,渐渐复杂。这种题目,大多数有一个变化的条件,比如,动点、角度…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第四天-Linux管道练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

冒泡排序数据结构实验报告

实验目的: 理解冒泡排序算法的原理和基本思路。熟悉冒泡排序在实际应用中的场景和优化方法。 实验内容(实验题目与说明) 编写一个双向冒泡排序算法,即在排序过程中以交替的正、反两个方向进行遍历。若第一趟把关键字最大的记录…

【Sublime Text】| 02——常用插件安装及配置

系列文章目录 【Sublime Text】| 01——下载软件安装并注册 【Sublime Text】| 02——常用插件安装及配置 失败了也挺可爱,成功了就超帅。 文章目录 1. 汉化2. 更换颜色主题3. 更改编码插件—ConvertToUTF84. 对齐插件—Alignment5. 括号高亮插件—BracketHighligh…

亲,你相信数据吗?

对于这个问题,我们首先要看一下数据的属性,数据本身是中性的,只是信息的一个载体,从这个属性定义来看,我们是不能盲目相信或者不相信数据的。相不相信数据,其实是数据可靠性的问题,而数据可靠性…

网络安全红队常用的攻击方法及路径

一、信息收集 收集的内容包括目标系统的组织架构、IT资产、敏感信息泄露、供应商信息等各个方面,通过对收集的信息进行梳理,定位到安全薄弱点,从而实施下一步的攻击行为。 域名收集 1.备案查询 天眼查爱企查官方ICP备案查询 通过以上三个…

与Anders Hejlsberg一起深入TypeScript - BDL2011

TypeScript是JavaScript的类型化超集,编译成纯JavaScript。与TypeScript的创建者Anders Hejlsberg坐下来讨论你所有的问题,并讨论TypeScript设计理念和生态发展! 视频地址: https://mp.weixin.qq.com/s?__bizMzU3NjM0NjY0OQ&mid224748…

[SAP ABAP] ABAP基础语法

ABAP(Advanced Business Application Programming)是一种编程语言,用于SAP软件的开发和定制 SAP ABAP是一种高级语言,主要用于在SAP平台上为大型企业和金融机构开发企业应用程序 1. ABAP基本语法结构 ABAP源程序由注释和ABAP语句组成,其中…