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

一文学会sklearn中的交叉验证方法,cross_validate和KFlod实战案例

前言

在机器学习中,我们经常需要评估模型的性能。而为了准确评估模型的性能,我们需要使用一种有效的评估方法。五折交叉验证(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中的交叉验证方法,cross_validate和KFlod实战案例

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

《面试1v1》ElasticSearch倒排索引

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…...

基于架构的软件开发方法

基于架构的软件开发方法 基于架构的软件开发方法是由架构驱动的,即指由构成体系结构的商业、质量和功能需求的组合驱动的。使用ABSD 方法,设计活动可以从项目总体功能框架明确就开始,这意味着需求抽取和分析还没有完成(甚至远远没有完成)&am…...

实战篇之基于二进制思想的用户标签系统(Mysql+SpringBoot)

一: 计算机中的二进制 计算机以二进制表示数据,以表示电路中的正反。在二进制下,一个位只有 0 和 1 。逢二进一 位。类似十进制下,一个位只有 0~9 。逢十进一位。 二: 进制常用运算 (位运算)…...

Ansible 进阶

Ansible 进阶 ⤴️Ansible 入门看这篇文章⤵️Ansible 实战看这篇文章 一.Ansible 中的 Playbook 1.1 Playbook 介绍 如下图,ansible 在整个管理过程中使用 playbook 的大体流程。 Playbook 中包含多个 role,每个 role 对应于在远程主机完成某个比较复…...

滴滴Ceph分布式存储系统优化之锁优化

摘自:https://mp.weixin.qq.com/s/oWujGOLLGItu1Bv5AuO0-A 2020-09-02 21:45 0.引言 Ceph是国际知名的开源分布式存储系统,在工业界和学术界都有着重要的影响。Ceph的架构和算法设计发表在国际系统领域顶级会议OSDI、SOSP、SC等上。Ceph社区得到Red Hat…...

flutter开发实战-MethodChannel实现flutter与iOS双向通信

flutter开发实战-MethodChannel实现flutter与iOS双向通信 最近开发中需要iOS与flutter实现通信,这里使用的MethodChannel 如果需要flutter与Android实现双向通信,请看 https://blog.csdn.net/gloryFlow/article/details/132218837 这部分与https://bl…...

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(七)

系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟 …...

K8S系列一:概念入门

写在前面 本文组织方式: K8S的架构、作用和目的。需要首先对K8S整体有所了解。 K8S是什么? 为什么是K8S? K8S怎么做? K8S的重要概念,即K8S的API对象。要学习和使用K8S必须知道和掌握的几个对象。 Pod 实例 Volume 数…...

QT- QLineEdite设置自动补全功能,并修改自动补全的样式

#include <QApplication> #include <QLineEdit> #include <QCompleter> #include <QStringListModel> #include <QMainWindow>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建一个字符串列表模型QStringListModel mode…...

解决Adobe Flash Player已被屏蔽

问题&#xff1a;该插件不支持 原因&#xff1a;现在浏览器默认禁用flash 博主当前使用的是谷歌浏览器Chrome 2个主要方法都已经失效 搜索一圈后&#xff0c;之前博客给出的2个主要方法都已经失效。 1、flash.cn 下载本地播放器 2、在chrome中打开flash的禁用开关 2023年解…...

【Spring专题】Spring之Bean的生命周期源码解析——阶段二(IOC之实例化)

目录 前言阅读准备阅读指引阅读建议 课程内容一、SpringIOC之实例化1.1 简单回顾1.2 概念回顾1.3 核心方法讲解 二、方法讲解2.1 AbstractBeanFactory#getMergedLocalBeanDefinition&#xff1a;合并BeanDefinition2.2 AbstractAutowireCapableBeanFactory#createBean&#xff…...

YOLOv8目标检测算法

YOLOv8目标检测算法相较于前几代YOLO系列算法具有如下的几点优势&#xff1a; 更友好的安装/运行方式速度更快、准确率更高新的backbone&#xff0c;将YOLOv5中的C3更换为C2FYOLO系列第一次尝试使用anchor-free新的损失函数 YOLOv8简介 YOLOv8 是 Ultralytics 公司继 YOLOv5…...

uniapp条件编译

uniapp条件编译 uni-app 将已经将可以跨平台兼容处理的组件及 API 等进行了封装&#xff0c;但是部分平台的特性无法跨平台。 由此&#xff0c;uni-app 提供了条件编译的方案&#xff0c;来处理不同平台的特定或差异。 写法 #ifdef&#xff1a; 仅在某平台存在#ifndef&#xf…...

2023年国赛数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&…...

volte端到端问题分析(一)

1、MME专载保持功能验证 **描述&#xff1a;**当无线环境较差时&#xff0c;有可能由于“Radio_Connection_with_UE_Lost” 原因造成的VoLTE通话掉话&#xff0c;如果UE发生RRC重建成功&#xff0c;手机将不会掉话。 对MME1202进行功能验证&#xff1a;开启后&#xff0c;MME专…...

微信小程序(原生)搜索功能实现

一、效果图 二、代码 wxml <van-searchvalue"{{ keyword }}"shape"round"background"#000"placeholder"请输入关键词"use-action-slotbind:change"onChange"bind:search"onSearch"bind:clear"onClear&q…...

Android AOSP源码编译——AOSP整编(二)

切换到源码目录下执行下面命令 1、初始化环境 . build/envsetup.sh //清除缓存 make clobber2、选择编译目标 lunchAOSP 预制了很多 Product。这里为了简单我们先不用真机&#xff0c;而是选择模拟器的方式&#xff0c;对于 x86_64 模拟器&#xff0c;我们选择的是 aosp_x86…...

铁是地球科学争论的核心

一项新的研究调查了地球内部铁的形态。这些发现对理解内核的结构产生了影响。 一项新的研究探索了地球内核的铁结构&#xff0c;如图中的黄色和白色所示。 资料来源&#xff1a;地球物理研究快报 地球内核以铁为主&#xff0c;铁可以多种晶体形式作为固体材料存在。&#xff08…...

TX Text Control .NET Server for ASP.NET Crack

TX Text Control .NET Server for ASP.NET Crack TX Text Control.NET Server for ASP.NET是用于Web应用程序或服务的服务器端组件。它是一个完全可编程的ASP.NET文字处理引擎&#xff0c;提供了广泛的文字处理功能。使用TX Text Control.NET Server&#xff0c;程序员可以开发…...

为什么BiliTools能成为哔哩哔哩内容管理的最佳选择?3大核心优势解析

为什么BiliTools能成为哔哩哔哩内容管理的最佳选择&#xff1f;3大核心优势解析 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/Bil…...

告别AI代码乱炖:用GitHub Spec Kit v0.0.79,像资深架构师一样拆解复杂功能

告别AI代码乱炖&#xff1a;用GitHub Spec Kit v0.0.79&#xff0c;像资深架构师一样拆解复杂功能 在当今快节奏的开发环境中&#xff0c;面对一个需要多模块协作的复杂功能时&#xff0c;许多开发者常常陷入两难&#xff1a;要么盲目依赖AI生成代码导致质量失控&#xff0c;要…...

沉浸式场景英文|小学英语1000词Ⅰ水果篇Ⅰ干词

沉浸式场景英文|小学英语1000词Ⅰ水果篇以下是为小学生整理的高频水果类英语单词&#xff0c;分类清晰&#xff0c;便于记忆&#xff1a;&#xff08;可一键复制导入「干词」直接沉浸场景背单词&#xff01;&#xff09;基础常见水果 apple 苹果 banana 香蕉 orange 橙子 grape…...

Pixel Language Portal 开发环境搭建:Windows 系统 Visual Studio 完整配置

Pixel Language Portal 开发环境搭建&#xff1a;Windows 系统 Visual Studio 完整配置 1. 准备工作与环境要求 在开始搭建Pixel Language Portal开发环境之前&#xff0c;我们需要确保系统满足基本要求并准备好必要的工具。Windows 10或11系统都能很好地支持这套开发环境&am…...

效率提升利器:快马一键生成极域电子教室自动化部署与校验脚本

效率提升利器&#xff1a;快马一键生成极域电子教室自动化部署与校验脚本 在IT运维和软件测试工作中&#xff0c;批量部署软件是再常见不过的任务了。就拿极域电子教室来说&#xff0c;每次新版本发布或者需要大规模安装时&#xff0c;手动操作不仅耗时耗力&#xff0c;还容易…...

网络安全应用初探:使用Qwen1.5-1.8B GPTQ分析日志与生成安全报告

网络安全应用初探&#xff1a;使用Qwen1.5-1.8B GPTQ分析日志与生成安全报告 想象一下这个场景&#xff1a;凌晨两点&#xff0c;安全运营中心的告警大屏上&#xff0c;成千上万条日志和告警信息像瀑布一样滚动。值班的安全分析师强打精神&#xff0c;试图从这片信息的海洋里分…...

革新性语音合成与转换工具:零基础掌握AI语音克隆技术

革新性语音合成与转换工具&#xff1a;零基础掌握AI语音克隆技术 【免费下载链接】GPT-SoVITS 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS 在数字内容创作爆…...

如何用GetQzonehistory高效备份QQ空间历史说说实现青春记忆永久保存

如何用GetQzonehistory高效备份QQ空间历史说说实现青春记忆永久保存 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 解决数字记忆流失的痛点方案 在这个信息快速迭代的时代&#xff0c…...

3分钟掌握WindowResizer:告别Windows窗口尺寸烦恼的终极解决方案

3分钟掌握WindowResizer&#xff1a;告别Windows窗口尺寸烦恼的终极解决方案 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的Windows窗口尺寸问题而烦恼吗&#x…...

手柄适配终极方案:DS4Windows实现跨平台控制器无缝体验

手柄适配终极方案&#xff1a;DS4Windows实现跨平台控制器无缝体验 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 当你兴冲冲地将PlayStation手柄连接到PC&#xff0c;却发现游戏完全没有…...