当前位置: 首页 > 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;程序员可以开发…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...