机器学习算法交叉验证最频繁犯的6个错误

news2024/10/6 22:24:57

交叉验证是保证模型有效的方法,同时也是防止模型过拟合的方法。但在有限的数据集中,交叉验证容易出现一些错误使用。

本文将介绍在使用交叉验证中,常见的一些错误情况,希望读者在阅读后可以避免再次犯错。

文章目录

    • 技术提升
    • 什么是交叉验证?
    • 错误1:选择错误的折数
    • 错误2:数据分布不同
    • 错误3:数据划分后采样
    • 错误4:过拟合验证集
    • 错误5:乱序的时序划分
    • 错误6:数据划分的随机性

技术提升

本文由技术群粉丝分享,项目代码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:dkl88191,备注:来自CSDN +研究方向
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

什么是交叉验证?

交叉验证(Cross-Validation)是验证模型有效性的方法,具体的实践流程如下:

  • 步骤1:数据集划分为K份,其中K-1份作为训练集,剩余1份作为验证集。

  • 步骤2:训练集并记录验证集精度。

  • 步骤3:将操作上述循环K次。

图片

交叉验证与按照比例划分的方法,与如下优点:

  • 交叉验证可以验证模型多次,减少了模型误差中的偏差,验证集精度更加可信。

  • 交叉验证可以得到多个模型,在测试集上可以进行多次预测,增加预测结果的多样性。

错误1:选择错误的折数

在交叉验证中折数对应K值,是决定了数据集应该划分为多少份,以及模型训练多少次的设置。当然K值需要人工设置,一般设置为5。

K值越小,模型训练次数越少,但模型验证集精度的偏差更大。K值一般不会选择2或者3。K值越大,模型训练的次数越多,需要更多的计算量,但模型验证集的偏差更小。但K值极少数会大于10。

当然选择K值还需要考虑样本的个数,我们希望K值能反应模型验证集精度。另一个可选的方法是尝试多个K值,然后查看模型精度是是否与K值相关。

错误2:数据分布不同

在进行训练与验证时,我们希望训练集和验证集分布保持一致。最直观的分布是标签分布,我们推荐使用StratifiedKFold来代替KFold图片当然也存在一些特殊情况,如果数据样本按照对照组划分,则在划分时也需要考虑分组对照的情况,这里则需要参考StratifiedGroupKfold
图片

上述划分逻辑只考虑到单个类别情况下的划分,更加复杂的还有数值标签的划分,以及多标签下的情况。

如下演示数值标签的划分,可以将数值进行离散化分箱,然后继续使用StratifiedKFold

from sklearn.model_selection import StratifiedKFold
def create_folds(df, n_grp, n_s=5):

    df['Fold'] = -1
    skf = StratifiedKFold(n_splits=n_s)
    df['grp'] = pd.cut(df.target, n_grp, labels=False)
    target = df.grp
    for fold_no, (t, v) in enumerate(skf.split(target, target)):
        df.loc[v, 'Fold'] = fold_no
    return df

错误3:数据划分后采样

下采样和上采样是解决样本不均衡的常见操作,但如果遇到数据划分,我们是先采样再划分验证集,还是先划分验证集再采样?

这里推荐对验证集不进行任何采样,因为验证集本身是验证模型的精度,用来反应模型的泛化能力。因此验证集数据的分布应该是采样之前的分布。

kfold = KFold(n_splits=n_splits)
scores = []
for train,valid in kfold.split(data):
        train_oversampled = oversample_function(train)
        score = train_and_validate(train_oversampled,valid)
        scores.append(score)

如果采样是必不可少的一步,还是推荐先采样再划分验证集,这样至少训练集和验证集是同分布的。

错误4:过拟合验证集

在我们进行特征工程时,经常会编写如下逻辑的代码:

  • 将训练集和测试集拼接一起,进行PCA

  • 计算标签编码,然后划分验证集

上述操作都会泄露标签的信息,也就是有隐藏的Leak风险。举一个例子,现在我们对用户进行风险预测,如果按照用户职业进行标签编码,然后再划分验证集,这样会让我们的验证集精度虚高。

正确的做法是先将数据集划分训练集和验证集,在训练集上计算标签编码,然后在验证集上进行映射。 不应该使用验证集进行任何的特征提取和转换过程。

错误5:乱序的时序划分

在时间序列中,数据是按照次序出现的,因此我们在划分验证集时需要考虑时间的先后次序,将验证集划分在训练集之后。当然可以直接参考TimeSeriesSplit划分的逻辑。

图片

在时序特征中,滞后特征是非常有效的一类。但也经常会泄露验证集信息。滞后特征应该在划分验证集之后,再进行操作。

错误6:数据划分的随机性

虽然数据划分可以得到多个模型,并减少模型验证集的随机性。但数据划分的过程本身还是存在随机性的。

如下代码所示,我们在划分数据集时可以考虑设置随机种子,然后就可以固定数据划分的逻辑。当然也可以训练多次,得到更加稳定的验证集结果。

SEEDS = [1, 2, 3, 4, 5]
ScoreMetric = []

for seed in SEEDS:
    seed_all(seed) # 设置所有seed
    kfold = KFold(n_splits=5, random_state=seed)
    scores = []

    for train,valid in kfold.split(data):
        score = train_and_validate(train,valid)
        scores.append(score)

    ScoreMetric.append(scores)

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

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

相关文章

轻松玩转树莓派Pico之四、Ubuntu下在线debug环境搭建

目录 1、openocd编译安装 1)安装依赖 2)下载 3)编译 4)安装GDB 2、Picoprobe编译与连接 1)下载、编译 2)开发板连接 3)Picoprobe连接至Linux 3、手工运行openocd和gdb 4、VSCode在线调…

Niantic CEO:AR有望取代二维码,理想的AR眼镜还需3-5年

早前,Niantic CEO John Hanke就曾谈到过对于元宇宙的愿景,相比于VR的沉浸式体验,他认为未来元宇宙应该是将虚拟和现实融合的AR体验。尽管如此,现在还没有一款足够普及的AR眼镜产品,仅依赖手机、平板电脑并不能展现沉浸…

《Linux-常见指令详解》

目录 Linux背景 开源 操作系统的理解 问题 1.空文件占磁盘空间吗? 2.创建的文件是在内存中还是磁盘中? 3.绝对路径和相对路径的区别 4.Linux下的文件后缀可以随便写,不同于Windows 常见指令和权限 查看 Linux 主机 ip 使用 XSh…

Alibaba 官方上线,SpringBoot+SpringCloud 全彩指南(第五版)

Alibaba 作为国内一线互联网大厂,其中 springcloudAlibaba 更是阿里微服务最具代表性的技术之一,很多人只知道 springcloudAlibaba 其实面向微服务技术基本上都有的下面就给大家推荐一份 Alibaba 官网最新版:SpringBootSpringCloud 微服务全栈…

面试系列分布式事务:谈谈2PC的理解

2PC其实就是两阶段提交的分布式事务中事务类型,两阶段提交就是分两个阶段提交: 第一阶段询问各个事务数据源是否准备好。 第二阶段才真正将数据提交给事务数据源。 为了保证该事务可以满足ACID,就引入一个协调者(Cooradinator&…

【OpenCV-Python】教程:3-9 轮廓(2)轮廓特征

OpenCV Python 轮廓特征 【目标】 轮廓矩轮廓周长、轮廓面积轮廓拟合、轮廓凸包、轮廓凹凸性检查外接矩形、最小包围圈椭圆拟合、直线拟合 【代码】 周长、面积、矩 第一幅图像为原始轮廓图像,第二幅图像为轮廓点拟合图像(精度为周长的1/10&#xff…

Docker——Windows版本Docker安装

目录 一、简介 1.1 Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? 1.2 Docker如何解决开发、测试、生产环境有差异的问题 1.3 Docker 和 虚拟机的区别 1.4 Docker架构 1.5 总结 二、Docker安装(Windows版) 2.1…

电容笔可以用什么代替?好用电容笔品牌推荐

在互联网办公、互联网教学等领域,电容笔再次成为全球流行的电子产品。用平替电容笔来代替苹果的电容笔吗?实际上,我们可以考虑买一支平替电容笔,而不用再买昂贵的苹果 Pencil。一支平替电容笔,一两百块钱,比…

spring web 简单项目数据库查询 纯注解版替代web.xml

关键词句:第一个spring 简单项目 纯注解 包括替代web.xml 文件 第一个spring mvc web 简单项目 纯注解 用纯注解写spring web 简单项目 纯注解写web 项目 spring 写数据库 查询 注解方式 spring 数据接链接池 用的阿里的 spring jdbc jdbcTemplate类使用…

python--星际大战(基础版)

实现功能: 运用python的pygame模块实现上方出现一群体的敌机,每个敌机会随机不定时发射子弹,下方是玩家飞机,通过控制方向和发射子弹来摧毁所以敌机,在游戏开始前会有一个计时器(3秒)计时结束&…

3、Pinpoint-Agent端注册服务到Server端

0、此节简介 此章节大部分操作是在另一台服务器上,vm7。 Agent端配置 项目发布 注册到Pinpoint服务端 接口调用,服务端查看详情 1、Agent端配置 Agent推荐使用和Pinpoint服务端同样的版本。 1.1、下载Pinpoint-Java-Agent包 Github下载链接:h…

第七章 规范化:Eslint + Prettier + Husky

第七章 规范化:Eslint Prettier Husky 为了项目能够长期健康的发展。代码的规范性建设非常重要。只有纪律严明的队伍才能不断打胜仗。 规范制定容易,执行的难度很大。 项目规范可以分为: 编码规范;项目结构规范;…

hyper-v虚拟机ubuntu ssh配置

环境描述: 本地机:win10系统 linux机:hyper-v 虚拟机中的ubuntu 1、ssh 安装和启用 //安装ssh sudo apt-get install ssh//启用ssh service ssh start//查看ssh状态 service ssh status 2、网络工具安装和ip查看 //安装网络工具 sudo ap…

[附源码]SSM计算机毕业设计基于篮球云网站JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

$.ajax异步请求总结

$.ajax()简单介绍 AJAX 是一种与服务器交换数据的技术,可以在不重新载入整个页面的情况下更新网页的一部分 $.ajax()是万能的,是最基础,最全面的那个;剩余的方法都是针对某种特定场景下的$.ajax()的简化形式 $.ajax()、$.post()…

Java环境变量学习

0. 找到你的安装路径 C:\Program Files\Java 这种语言的开发工具,重要的东西建议就安装在C盘 0.1 里面有什么? 其实就是很多java命令而已 用来编译的,运行的 JDK开发用的JRE运行用的 就像python中给你开发工具的同时,再给你一个…

[附源码]java毕业设计学习资源共享与在线学习系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Jetpack Compose中的state核心思想

Compose 中的状态 应用的“状态”是指可以随时间变化的任何值。这是一个非常宽泛的定义,从 Room 数据库到类的变量,全部涵盖在内。 所有 Android 应用都会向用户显示状态。下面是 Android 应用中的一些状态示例: 聊天应用中最新收到的消息…

Unity3D : 本地坐标系,世界坐标系,和TransformPoint,TransformVector,TransformDirection的区别

目录 一、世界坐标系与本地坐标系 二、srcGameObject.transform.TransformPoint(Vector3 vec) 三、srcGameObject.transform.TransformVector(Vector3 vec) 四、srcGameObject.transform.TransformDirection(Vector3 vec) 五:示例 一、世界坐标系与本地坐标系 世界坐标很…

[LabVIEW]圖像內的物件計算_Count objects

NI雖然是以賣硬件為主的公司,但其在軟件(LabVIEW)的著墨也相當深厚,尤其是各類應用模組的更新速度和對應功能。 每每不經意地碰觸到新版本的LabVIEW,都會不由自主地翻閱和嘗試新增模組。 本文藉由兩個模組串接簡易製作一支圖像計數程式&…