Python | 机器学习中的模型验证曲线

模型验证是数据科学项目的重要组成部分,因为我们希望选择一个不仅在训练数据集上表现良好,而且在测试数据集上具有良好准确性的模型。模型验证帮助我们找到一个具有低方差的模型。

什么是验证曲线

验证曲线是一种重要的诊断工具,它显示了机器学习模型准确性变化与模型超参数变化之间的敏感性。

验证曲线在y轴上绘制模型性能指标(如准确度、F1分数或均方误差),在x轴上绘制超参数值的范围。模型的超参数值通常在对数尺度上变化,并且使用针对每个超参数值的交叉验证技术来训练和评估模型。

验证曲线中存在两条曲线-一条用于训练集得分,一条用于交叉验证得分。默认情况下,scikit-learn库中的验证曲线函数执行3折交叉验证。

验证曲线用于基于超参数评估现有模型,而不是用于调整模型。这是因为,如果我们根据验证分数调整模型,模型可能会偏向于模型调整的特定数据;因此,不是模型泛化的良好估计。

验证曲线说明

解释验证曲线的结果有时可能很棘手。在查看验证曲线时,请记住以下几点:

  • 理想情况下,我们希望验证曲线和训练曲线看起来尽可能相似。
  • 如果两个分数都很低,则模型可能是欠拟合的。这意味着要么模型太简单,要么特征太少。也可能是模型被正则化得太多。
  • 如果训练曲线相对较快地达到高分,而验证曲线滞后,则模型是过拟合的。这意味着模型非常复杂,数据太少,或者它可能只是意味着数据太少。
  • 我们希望训练和验证曲线两者的参数值是最接近的。

在Python中实现验证曲线

为了简单起见,在这个例子中,我们将使用非常流行的“digits”数据集,它已经存在于sklearn库的sklearn.dataset模块中。

对于这个例子,我们将使用k-最近邻(KNN)分类器,并将绘制模型在训练集得分和交叉验证得分上的准确性与“k”值的关系,即,要考虑的邻居的数量。代码实现5折交叉验证,并测试从1到10的“k”值。

# Import Required libraries
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_digits
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import validation_curve# Loading dataset
dataset = load_digits()# X contains the data and y contains the labels
X, y = dataset.data, dataset.target# Setting the range for the parameter (from 1 to 10)
parameter_range = np.arange(1, 10, 1)# Calculate accuracy on training and test set using the
# gamma parameter with 5-fold cross validation
train_score, test_score = validation_curve(KNeighborsClassifier(), X, y,param_name="n_neighbors",param_range=parameter_range,cv=5, scoring="accuracy")# Calculating mean and standard deviation of training score
mean_train_score = np.mean(train_score, axis=1)
std_train_score = np.std(train_score, axis=1)# Calculating mean and standard deviation of testing score
mean_test_score = np.mean(test_score, axis=1)
std_test_score = np.std(test_score, axis=1)# Plot mean accuracy scores for training and testing scores
plt.plot(parameter_range, mean_train_score,label="Training Score", color='b')
plt.plot(parameter_range, mean_test_score,label="Cross Validation Score", color='g')# Creating the plot
plt.title("Validation Curve with KNN Classifier")
plt.xlabel("Number of Neighbours")
plt.ylabel("Accuracy")
plt.tight_layout()
plt.legend(loc='best')
plt.show()

在这里插入图片描述

从这个图中,我们可以观察到’k’ = 2将是k的理想值。随着邻居数(k)的增加,训练分数和交叉验证分数的准确性都会降低。

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

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

相关文章

基于Java+SpringMVC+vue+element宠物管理系统设计实现

基于JavaSpringMVCvueelement宠物管理系统设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…

当你能量越来越高的时候, 你开始真正理解每一个人,

在追求个人成长和内心平静的道路上,我们不可避免地会意识到能量频率对于我们自身以及周围人的影响。随着能量越来越高,我们开始真正理解每一个人,意识到世界并非黑白分明,而是充满了各种不同的状态和选择。在这篇博客中&#xff0…

计算机二级C语言的注意事项及相应真题-4-程序设计

目录 31.找出学生的最高分,由函数值返回32.计算并输出下列多项式的值33.将一个数字字符串转换成与其面值相同的长整型整数。可调用strlen函数求字符串的长度34.将字符串中的前导*号全部移到字符串的尾部。函数fun中给出的语句仅供参考35.将一组得分中,去…

算法---滑动窗口练习-7(串联所有单词的子串)

串联所有单词的子串 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址:串联所有单词的子串 2. 讲解算法原理 算法的基本思想是使用滑动窗口来遍历字符串s,并利用两个哈希表(hash1和hash2)来统计窗口中子串的频次。 …

docker容器技术基础入门-1

文章目录 容器(Container)传统虚拟化与容器的区别Linux容器技术Linux NamespacesCGroupsLXCdocker基本概念docker工作方式docker容器编排 容器(Container) 容器是一种基础工具;泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于…

#QT(定时轮播电子相册)

1.IDE:QTCreator 2.实验: (1)使用QOBJECT的TIMER (2)EVENT时间 (3)多定时器定时溢出判断 (4)QLABEL填充图片 3.记录 4.代码 widget.h #ifndef WIDGET_H…

批量查询快递不再难,前缀单号助你轻松搞定!

在快递业务日益繁忙的当下,批量查询快递单号成为了许多人的迫切需求。如何能够快速、准确地找到所需的快递单号呢?其实,利用前缀单号进行批量查询是一个高效且实用的方法。下面,就让我们一起了解如何利用前缀单号轻松查找快递单号…

Yolo系列算法-理论部分-YOLOv3

0. 写在前面 YOLO系列博客,紧接上一篇Yolo系列算法-理论部分-YOLOv2-CSDN博客 1. YOLOv3-定型之作 2018年,Redmon团队推出YOLOv3的网络模型,将骨干网络(backbone)由darknet-19替换成darknet-53网络,加入特…

javaScript脚本语言基础

javaScript脚本语言基础 介绍: JavaScript可以用来实现网页操作(图片切换) 脚本语言:不需要编译 sql html css javaScript 由某种解释器直接可以运行的 JavaScript也是面向对象的,但与java是两种不同的语言 script:脚本 jav…

git reset

参考:https://www.cnblogs.com/lfxiao/p/9378763.html 写完代码后,我们一般这样 git add . //添加所有文件 git commit -m "本功能全部完成" 执行完commit后,想撤回commit,怎么办? git reset --soft HE…

如何用shell脚本构建Android模块

在Android源码编译过程中,shell脚本起到了至关重要的作用。它们不仅用于自动化构建过程,还用于执行各种系统级的任务和测试。下面将详细介绍shell脚本在Android源码编译中的用法,并给出多个具体例子。 Shell脚本在Android源码编译中的基本用…

如何在CasaOS系统玩客云中安装内网穿透工具实现远程访问内网主机下载资源

文章目录 1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 2月底,玩客云APP正式停止运营,不再提供上传、云添加功能。3月初,有用户进行了测试,局域网内的各种服务还能继续使用,但…

Zabbix和Sentinel有什么区别

Zabbix和Sentinel在功能、用途和结构上存在明显的区别。 Zabbix是一个企业级的、开源的、分布式监控套件,主要用于监控IT基础设施的可用性和性能。它可以监控网络和服务的状况,并利用灵活的告警机制,允许用户对事件发送基于邮件、短信、微信…

unity学习(60)——选择角色界面--MapHandler2-MapHandler.cs

1.新建一个脚本&#xff0c;里面有static变量loadingPlayerList using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Assets.Scripts.Model {internal class LoadData{public static List<Pl…

线性表章节课后习题答案集锦

目录 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.5 /* 要比较两个单词在字典中的顺序&#xff0c;可以逐个比较它们的字符。首先比较两个单词的第一个字符&#xff0c;如果相同&#xff0c;则继续比较下一个字符&#xff0c;直到找到不同的字符或者某个单词比较完毕…

IO流——打印流

PrintStream/PrintWriter(打印流) 作用&#xff1a;打印流可以更方便、更高效地将数据打印出去&#xff0c;能实现打印啥就出去啥 PrintStream提供地打印数据的方案 构造器说明public PrintStream​(OutputStream/File/String)打印流直接通向字节输出流/文件/文件路径publi…

Go-知识select

Go-知识select 1. select 的特性1.1 chan读写1.2 返回值1.3 default 2. select 经典使用2.1 永久阻塞2.2 快速检错2.3 限时等待 3. 实现原理3.1 数据结构3.2 实现逻辑3.3 原理总结 4. 总结4.1 大概原理4.2 参数4.3 返回值 一个小活动&#xff1a; https://developer.aliyun.com…

springboot基于SpringBoot的学生请假管理系统的设计与实现

摘 要 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对学生请假管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上…

江科大stm32学习笔记【6-2】——定时器定时中断定时器外部时钟

一.定时器定时中断 1.原理 2.硬件 3.程序 此时CK_PSC72M&#xff0c;定时1s&#xff0c;也就是定时频率为1Hz&#xff0c;所以可以PSC7200-1,ARR10000-1。 Timer.c: #include "stm32f10x.h" // Device headerextern uint16_t Num;//声明跨文件的…

力扣经典题:分割平衡字符串

大佬的代码非常简洁 int balancedStringSplit(char * s){short i0,count0,sign0;while(s[i]){signs[i]L?sign1:sign-1;if(sign0) count;}return count; }