当前位置: 首页 > news >正文

一文学会sklearn中的交叉验证的方法

前言

在机器学习中,我们经常需要评估模型的性能。而为了准确评估模型的性能,我们需要使用一种有效的评估方法。五折交叉验证(5-fold cross-validation)就是其中一种常用的模型评估方法,用于评估机器学习模型的性能和泛化能力。

在本文中,我们将介绍五折交叉验证的原理和实现方法,并探讨其在模型评估中的重要性。

sklearn实现交叉验证

数据集使用sklearn中常见的多分类数据,iris数据集。以下是导入库和数据的示例代码:

from sklearn import svm, datasets
from sklearn.model_selection import cross_val_score,cross_validate# iris数据
X, y = datasets.load_iris(return_X_y=True)# 设置参数搜索范围
param_grid = [{'kernel': ['linear', 'poly', 'rbf'], 'C': [0.1, 1.0, 10.0]},
]# 进行网格搜索
grid_search = GridSearchCV(SVR(), param_grid, cv=5)
grid_search.fit(X, y)
best_params = grid_search.best_params_
print(best_params)
# {'C': 10.0, 'kernel': 'rbf'}clf = SVR(kernel="rbf",C=10)

在上面代码中,我们使用iris数据集,对SVR模型进行网格搜索,找到合适的参数:{'C': 10.0, 'kernel': 'rbf'}
接下来我们在使用五折交叉验证对模型进行进一步评估。

第一种方法

使用cross_validate()方法进行验证,以下是示例代码:

# 多分类模型的评估指标
# 多分类模型的
scoring = ["f1_macro","precision_macro","recall_macro"]cross_validate(clf, X, y, cv=5, scoring=scoring)

代码运行结果如下:

{'fit_time': array([0.00298905, 0.00498605, 0.00598025, 0.00199437, 0.0079782 ]),'score_time': array([0.00499058, 0.00897241, 0.00701547, 0.01296639, 0.01496029]),'test_f1_macro': array([0.96658312, 0.96658312, 0.96658312, 0.93333333, 1.        ]),'test_precision_macro': array([0.96969697, 0.96969697, 0.96969697, 0.93333333, 1.        ]),'test_recall_macro': array([0.96666667, 0.96666667, 0.96666667, 0.93333333, 1.        ])}
  • fit_time:模型训练时间
  • score_time:模型评估指标计算时间
  • test_f1_macro:- test_precision_macro:验证指标的test_f1_macro分数结果
  • test_precision_macro:验证指标的precision_macro分数结果
  • test_recall_macro:验证指标的recall_macro分数结果

第二种方法

使用KFlod和StratifiedKFold方法对数据进行交叉验证,两者的主要区别是,KFold是随机划分,对类别不均衡的数据,可能出现全是0标签,或者全是1标签的数据集。StratifiedKFold使用的是分层抽样,若数据集有4个类别,比例是2:3:3:2,则划分后的样本比例约是2:3:3:2。避免随机划分数据集出现的偶然性。

以下是用KFlod和StratifiedKFold方法对数据进行交叉验证的示例代码:

result = {'test_f1_macro':[],'test_precision_macro':[],'test_recall_macro':[]
}
for train, test in kfolder.split(X,y):X_train, X_test = X[train], X[test]y_train, y_test = y[train], y[test]
#      # 训练模型clf = clf.fit(X_train, y_train)# 在训练集上进行预测并计算R2和RMSEy_pred = clf.predict(X_test)f1 = f1_score( y_test, y_pred, average='macro' )p = precision_score(y_test, y_pred, average='macro')r = recall_score(y_test, y_pred, average='macro')result["test_f1_macro"].append(round(f1,2))result["test_precision_macro"].append(round(p,2))result["test_recall_macro"].append(round(r,2))
print(result)

代码运行结果如下:

{'test_f1_macro': [0.96, 0.97, 0.97, 0.97, 0.96],'test_precision_macro': [0.96, 0.97, 0.97, 0.97, 0.97],'test_recall_macro': [0.97, 0.97, 0.97, 0.97, 0.96]}

对比发现,使用第一种方法代码更简洁高效,第二种方法更加详细可控,找到你更喜欢的方式编程即可。

什么是五折交叉验证

在机器学习中,我们通常需要将数据集分为训练集和测试集。训练集用于训练模型,而测试集用于评估模型的性能。然而,使用一次性划分的训练集和测试集可能会导致模型在特定的数据集上表现良好,但在其他数据集上表现较差。这是由于模型可能过度拟合了训练集的特定模式,而无法泛化到其他数据集。

为了解决这个问题,五折交叉验证将数据集划分为五个相等大小的子集,其中四个子集用于训练模型,而剩下的一个子集用于测试模型。这个过程被重复五次,每次使用不同的子集作为测试集。最终,将五次测试结果的平均值作为模型的性能指标。

五折交叉验证的优点之一是可以更好地评估模型的泛化能力。通过使用多个不同的测试集,我们可以更准确地估计模型在未见过的数据上的性能。此外,五折交叉验证还可以更充分地利用数据集,因为每个样本都会在训练集和测试集中出现。

为什么要使用五折交叉验证

五折交叉验证有以下几个优点:

1. 减少过拟合:通过使用多个不同的训练集和测试集组合,可以减少模型对特定训练集的过拟合情况。

2. 更准确的评估模型性能:五折交叉验证可以提供更准确的模型性能评估,因为它使用了多个不同的测试集进行评估。

3. 更好的参数调优:通过使用五折交叉验证,我们可以更好地进行参数调优。我们可以在每一次交叉验证中使用不同的参数组合,并选择性能最好的参数组合。

如何使用五折交叉验证

使用五折交叉验证的步骤如下:

  1. 将数据集划分为五个相等大小的子集。

  2. 对于每一次交叉验证,选择其中的四个子集作为训练集,剩下的一个子集作为测试集。

  3. 使用训练集训练模型,并使用测试集评估模型的性能。

  4. 重复上述步骤五次,每次使用不同的子集作为测试集。

  5. 将五次评估的结果按照特定的计算方式计算作为最终的评估结果。

总结

五折交叉验证是一种常用的评估方法,它可以减少过拟合,提供更准确的模型性能评估,并帮助进行参数调优。在实际应用中,我们可以使用五折交叉验证来评估和改进我们的机器学习模型。

相关文章:

一文学会sklearn中的交叉验证的方法

前言 在机器学习中,我们经常需要评估模型的性能。而为了准确评估模型的性能,我们需要使用一种有效的评估方法。五折交叉验证(5-fold cross-validation)就是其中一种常用的模型评估方法,用于评估机器学习模型的性能和泛…...

【MySQL面试题(66道)】

文章目录 MySQL面试题(66道)基础1.什么是内连接、外连接、交叉连接、笛卡尔积呢?2.那 MySQL 的内连接、左连接、右连接有有什么区别?3.说一下数据库的三大范式?4.varchar 与 char 的区别?5.blob 和 text 有什么区别?6.…...

CSSCI、北核期刊投稿指南(2023年更新)

该数据为经管类的期刊投稿指南,包含发表难度,文章数量,影响因子,用户评价等指标。共5份文件,分别为国内所有期刊信息库、投稿指南(CSSCI版本、CSSCI扩展版本、北大核刊版本、建议期刊版本) 一、…...

构建 NodeJS 影院微服务并使用 docker 部署它(02/4)

一、说明 构建一个微服务的电影网站,需要Docker、NodeJS、MongoDB,这样的案例您见过吗?如果对此有兴趣,您就继续往下看吧。 图片取自网络 — 封面由我制作 这是✌️“构建 NodeJS 影院微服务”系列的第二篇文章。 二、对第一部分的…...

HTML <style> 标签

实例 <html> <head> <style type="text/css"> h1 {color:red} p {color:blue} </style> </head><body> <h1>Header 1</h1> <p>A paragraph.</p> </body> </html>定义和用法 <style>…...

设计模式——迪米特法则

文章目录 基本介绍应用实例应用实例改进迪米特法则注意事项和细节 基本介绍 一个对象应该对其他对象保持最少的了解类与类关系越密切&#xff0c;耦合度越大迪米特法则(Demeter Principle)又叫最少知道原则&#xff0c;即一个类对自己依赖的类知道的越少越好。也就是说&#x…...

区块链基本概念与当前生态简介

区块链是一种去中心化的分布式账本技术&#xff0c;它通过将数据按照时间顺序链接成区块&#xff0c;并使用密码学算法确保数据的安全性和完整性。每个区块包含一定数量的交易记录&#xff0c;而且每个区块都包含了前一个区块的哈希值&#xff0c;这样形成了一个不可篡改的链式…...

mac安装lrzsz出错Command failed with exit 128: git

终端检查电脑是否安装了rz和sz which sz若报错&#xff0c;则需要下载。由于网络和代理的原因&#xff0c;以下命令会报错&#xff1a; brew install lrzsz是因为brew和git配置的代理存在冲突&#xff0c;对于无外网链接功能&#xff0c;无特殊配置的git而言&#xff0c;需要…...

“深入探索JVM内部机制:揭秘Java虚拟机“

标题&#xff1a;深入探索JVM内部机制&#xff1a;揭秘Java虚拟机 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;从内存管理、垃圾回收、即时编译等方面进行详细剖析。通过了解JVM的工作原理&#xff0c;我们可以更好地理解Jav…...

lvs-DR

lvs-DR数据包流向分析 client向目标VIP发出请求。 DIR根据负载均衡算法一台active的RS&#xff08;RIR1&#xff09;&#xff0c;将RIP1所在的网卡的mac地址作为目标的mac地址&#xff0c;发送到局域网里。 RIRI在局域网中的收到这个帧&#xff0c;拆开后发现目标&#xff08…...

Vue 项目运行 npm install 时,卡在 sill idealTree buildDeps 没有反应

解决方法&#xff1a;切换到淘宝镜像。 以下是之前安装的 xmzs 包&#xff0c;用于控制切换淘宝镜像。 该截图是之前其他项目切换淘宝镜像的截图。 切换镜像后&#xff0c;顺利执行 npm install 。...

ShardingSphere介绍

ShardingSphere从4.X到5.X的内容发生了很多的改变&#xff0c;感兴趣的伙伴可以到ShardingSphere的博客查看各个版本的新特性。https://blog.csdn.net/ShardingSphere?typeblog 此次使用最新版本 shardingShpere5.4.0&#xff0c;实现数据库读写分离、数据分片、分布式事务等…...

【SA8295P 源码分析】44 - 如何替换 NON-HLOS.bin 中的 Wifi Firmware 固件

【SA8295P 源码分析】44 - 如何替换 NON-HLOS.bin 中的 Wifi Firmware 固件 1、提取 NON-HLOS.bin 中的 Wifi Firmware 出来2、把提取出来的 wifi 固件放到代码中3、重新打包生成 NON-HLOS.bin4、将生成的 NON-HLOS.bin 与 老的 NON-HLOS.bin 对比5、使用fastboot 下载测试wifi…...

市面上那里有稳定L2股票行情数据接口?

随着市场的发展和技术的进步&#xff0c;level2股票行情数据接口已经成为股票交易软件的标准配置之一。虽然这些券商软件的功能在很大程度上相似&#xff0c;但它们仍然有自己的特点和优势。 例如&#xff1a;通过股票交易所以其专业的研究报告和丰富的信息服务而受到广泛关注&…...

个人信息保护影响评估(PIA)怎么做?解发条件、实施步骤、操作指南

个人信息保护一直是人们关注的热点话题&#xff0c;互联网、人工智能、大数据等新兴技术的快速发展极大地增强了入侵个人信息的能力&#xff0c;对个人信息的随意收集、违法获取、过度使用、非法买卖、泄露等问题引起了全球各国的普遍关注。同时随着用户的个人信息保护意识的逐…...

HTML <sub> 标签

例子 这段文本包含 <sub>下标</sub> 定义和用法 <sub> 标签可定义下标文本。 包含在 <sub> 标签和其结束标签 </sub> 中的内容将会以当前文本流中字符高度的一半来显示&#xff0c;但是与当前文本流中文字的字体和字号都是一样的。 提示&am…...

C# 设置、获取程序,产品版本号

右键&#xff0c;程序属性。打开“程序集信息” 选择需要设置的版本信息。下面的代码&#xff0c;获取不同的设置内容。 string 其他 Assembly.GetExecutingAssembly().FullName; string 程序集版本 Assembly.GetExecutingAssembly().G…...

LeetCode 面试题 01.04. 回文排列

文章目录 一、题目二、C# 题解 一、题目 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。 点击此处跳转题目。 示例1&#xff1a; 输入&…...

CentOS 7 安装MySQL8.0.33

一、查看 CentOS 版本 要查看当前 CentOS 版本&#xff0c;你可以执行以下命令&#xff1a; cat /etc/centos-release 该命令将显示当前 CentOS 的版本信息&#xff0c;例如&#xff1a; CentOS Linux release 7.9.2009 (Core) 在这个示例中&#xff0c;CentOS 版本为 7.…...

OpenCV(二)——图像基本处理(四)

目录 4.图像形态学操作 4.1 图像腐蚀 4.2 图像膨胀 4.3 开运算 4.4 闭运算...

11.小程序的配置项

window导航配置 全局配置通过 app.json进行 “window”: { “backgroundTextStyle”: “light”, “navigationBarBackgroundColor”: “#fff”, “navigationBarTitleText”: “Weixin”, “navigationBarTextStyle”: “black” }, 局部配置通过页面的xx.json配置 { “navig…...

一文科普,配资门户网是什么?

配资门户网是一个为投资者提供配资服务的平台。配资是指通过借用他人资金进行投资交易的一种金融操作方式。配资门户网作为一个线上平台&#xff0c;为投资者提供了方便、快捷的配资服务。 配资门户网提供了多种不同的配资方案&#xff0c;以满足不同投资者的需求。投资者可以…...

编写一个俄罗斯方块

编写俄罗斯方块 思路。 1、创建容器数组&#xff0c;方块&#xff0c; 2、下落&#xff0c;左右移动&#xff0c;旋转&#xff0c;判断结束&#xff0c;消除。 定义一个20行10列的数组表示游戏区。初始这个数组里用0填充&#xff0c;1表示有一个方块&#xff0c;2表示该方块固…...

认识容器,走进Docker

文章目录 容器技术简介容器的核心技术容器平台技术容器的支持技术 Docker理念Docker安装配置阿里云镜像加速器 容器技术简介 一切在云端&#xff0c;万物皆容器&#xff0c;说到容器&#xff0c;大家都会想到Docker,Docker现在几乎是容器的代名词&#xff0c;什么是Docker&…...

初始web

华子目录 前后端与全栈BS架构网页开发原则前端三剑客初始htmlhtml的基本框架如何使用vscode创建网页网页基本框架html基本标签 前后端与全栈 前端:给用户看的内容 – 荧幕前&#xff08;负责显示&#xff09; 后端:在后台处理数据 – 荧幕后&#xff08;负责处理&#xff09; …...

JVM中释放内存的三种方法

判断是否需要垃圾回收可以采用分析。 1标记--清除算法 分为两个阶段&#xff0c;标记和清除&#xff0c;先利用可达性分型标记还存活的对象&#xff0c;之后将没有被标记的对象删除&#xff0c;这样容易生成空间碎片&#xff0c;而且效率不稳定 标记阶段&#xff1a; 标记阶段…...

图床项目进度(一)——UI首页

1. 前言 前面我不是说了要做一个图床吗&#xff0c;现在在做ui。 我vue水平不够高&#xff0c;大部分参考b站项目照猫画虎。 vue实战后台 我使用ts&#xff0c;vite&#xff0c;vue3进行了重构。 当然&#xff0c;我对这些理解并不深刻&#xff0c;许多代码都是游离于表面&am…...

vue3父子组件相互调用方法详解

vue3父子组件相互调用方法详解 1、前言2、父组件调用子组件方法2.1 子组件Child.vue2.2 父组件Father.vue 3、子组件调用父组件方法3.1 父组件Father.vue3.2 子组件Child.vue 1、前言 在vue3项目开发中&#xff0c;我们常常会遇到父子组件相互调用的场景&#xff0c;下面以set…...

Java之接口

作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; Java之接口 接口的概念语法规则接口特性接口使用案…...

QT学习笔记-QT5.15编译及安装谷歌拼音输入法(QtInputMethod_GooglePinyin)

QT学习笔记-QT5.15编译及安装谷歌拼音输入法&#xff08;QtInputMethod_GooglePinyin&#xff09; 0、背景1、环境2、下载QtInputMethod_GooglePinyin源码3、使用MinGW64构建套件编译3.1 编译QtInputMethod_GooglePinyin源码3.2、部署tgtsmlInputContextPlugin输入法插件3.3、运…...

做网站用哪个服务器好/seo推广网络

《读懂一本书&#xff1a;樊登读书法》_精选读后感500字我们为何要读书&#xff1f;这个问题好回答&#xff0c;也不好回答&#xff01;我们读书带着目的&#xff1f;或者不带目的&#xff1f;都不重要&#xff01;重要的是能够使自己成长和进步&#xff0c;只有这样才能积累“…...

活动手机网站开发/营销型网站特点

今天我们学习几个常用的Dockerfile指令&#xff0c;在 http://docs.docker.com/reference/builder/可以查看Dockerfile中能使用的全部指令的清单。 一、CMD指令 CMD指令用于指定一个容器启动时要运行的命令&#xff0c;这与RUN指令有点类似&#xff0c;但RUN指令是指定镜像被…...

什么网站做兼职靠谱吗/2022最近比较火的营销事件

身份证过期要到蓟县南所去办理 南所电话&#xff1a;022-29186230 南所地址&#xff1a;天津市蓟州区渔阳镇光明路44号文昌街派出所&#xff08;不用进院内&#xff0c;瑞鑫轩东北菜旁边就是了&#xff09; 办理时间&#xff1a;周一至周日8:30&#xff5e;16:30 办理费用&…...

建筑工程网签合同周末可以签吗/seo是什么

本文已迁移至&#xff1a;https://blog.csdn.net/COCO56/article/details/89382093 原标题&#xff1a;VS各版本下载与密钥&#xff08;从2008到2017&#xff09;&#xff0c;VS老版本在官网如何下载&#xff08;解决下载老版本时提示抱歉,我们找不到适合您的下载内容的问题&a…...

网站论坛制作/郑州网站建设七彩科技

DevOps是一种实践方法&#xff0c;旨在保证高质量的前提下实现研发运维一体化&#xff0c;从而大幅缩短系统变更从提交到部署生产环境的时间。其中&#xff0c;持续集成是DevOps中非常重要的一环&#xff0c;它涉及集成多个开发人员的代码&#xff0c;并不断编译和测试&#xf…...

长安公司网站建设/竞价推广托管

实际上git使用越来越普及了&#xff0c;当然如果你还是把它当作svn来使用&#xff0c;或者就是只是通过一些图形化工具上几个按钮点一点就失去很多git自身有魅力的地方。首先对照svn或者其他上一代的版本管理工具&#xff0c;我们修改文件不再有“这个文件要不要lock的问题”&a…...