深度学习技巧应用7-K折交叉验证的实践操作

news2025/1/16 1:51:39

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用7-K折交叉验证的实践操作。K折交叉验证是一种机器学习中常用的模型验证和选择方式,它可以将数据集分为K个互斥的子集,其中K-1个子集作为训练集,剩下1个子集作为验证集,重复K次,每次使用不同的验证集,最终平均所有结果作为模型的性能度量。针对数据量较少的时候,我们可以采取K折交叉验证提升模型的性能。

一、K折交叉验证的步骤

1.将数据集按照预定比例分为K份。

2.分别使用其中的K-1份作为训练数据,剩下的1份作为验证数据集,进行训练和测试。

3.重复上述步骤K次,每次选用不同的验证集,最终将K次性能指标的平均值作为模型的性能度量,从而评估模型的泛化能力。

K折交叉验证通常会在模型的训练过程中使用,它可以评估模型在训练集以外的数据上的性能表现,并且可以减少因数据集随机样本而带来的偏差,提高模型泛化能力和鲁棒性。此外,K折交叉验证还可用于调整模型超参数,从而找到最佳的模型参数并提高模型性能。

二、K折交叉验证的优势

1.充分利用数据集:K折交叉验证会将数据集划分为k份,每次交叉验证时都会选用不同的训练集和验证集,这样可以充分利用数据集中的所有数据,减少因缺少数据而造成的模型过拟合。

2.减少过拟合:通过将数据集划分为k个相等的子集,K折交叉验证可以避免某些数据只出现在训练集或验证集中,从而减少因过拟合而造成的性能评估误差。

3.提高模型鲁棒性:K折交叉验证可以对模型的泛化性能进行评估,从而可以检测到模型在不同训练集上的表现,提高了模型的鲁棒性。

三、K折交叉验证的使用

1.模型评估:K折交叉验证可用于评估模型的泛化能力,评估模型在未知数据上的表现。在使用K折交叉验证时,我们通常将数据集划分为训练集和测试集,然后将训练集进行K折划分,用其中的K-1份作为训练集,剩下的1份作为验证集,训练模型并评估性能,重复K次,计算平均性能,从而评估模型的性能表现。

2.模型选择:K折交叉验证可用于选择最佳的模型,通常我们可以在多个预定义的模型中选择,将数据集进行K折划分,选用一种评估指标(如准确率、AUC等),根据性能指标的平均表现选择最优的模型。

3.超参数调整:K折交叉验证可以用于超参数的调整。超参数通常是通过交叉验证来确定的,比如在支持向量机(SVM)上,我们通常需要调整的超参数包括核函数类型、惩罚因子等等,K折交叉验证可以帮助我们通过在训练集上训练模型并在验证集上计算指标来确定超参数的最佳值。

四、K折交叉验证代码实例

from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 逻辑回归模型
def LogisticModel(X,y):
    # 定义模型
    model = LogisticRegression()
    # 定义k折交叉验证的折数
    k = 5
    # 使用KFold函数进行划分数据集
    kfold = KFold(n_splits=k, shuffle=True)
    # 进行k次训练和验证
    acc = []
    for train_index, test_index in kfold.split(X):
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]
        model.fit(X_train, y_train)
        y_pred = model.predict(X_test)
        acc.append(accuracy_score(y_test, y_pred))

    # 计算k次验证的准确率的平均值
    mean_acc = sum(acc) / k
    # 输出结果
    print("Accuracy:", mean_acc)


#随机森林模型
def RandomForest(X,y):
    # 创建模型
    model = RandomForestClassifier(n_estimators=10)

    # 设置K折交叉验证的折数
    kfold = KFold(n_splits=5, shuffle=True)

    # 训练模型并进行K折交叉验证
    scores = cross_val_score(model, X, y, cv=kfold)
    #print(scores)

    # 输出K折交叉验证结果的平均得分
    print(f"Accuracy: {scores.mean()}")


LogisticModel(X, y)
RandomForest(X,y)

代码对逻辑回归模型、随机森林模型进行K折交叉验证。运行结果:

Accuracy: 0.9666666666666668
Accuracy: 0.9466666666666667

更多内容请持续关注哦!

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

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

相关文章

Hive设置元数据支持中文显示

在hive中建外部表时遇见到这样一个问题,就是表字段的中文注释在desc 表结构时看不了,发现原来是Hive的元数据库没有设置支持中文显示 第一步,在元数据库metastore完成初始化后,再次登录MySQL [roothurys24 hurys_table_data]# m…

成功解决:OSError: [E050] Can’t find model ‘en_core_web_sm’.

成功解决OSError: [E050] Can’t find model ‘en_core_web_sm’. 问题描述 在安装spacy包之后,再加载’en_core_web_sm’语言模型时,报出OSError: [E050] Can’t find model ‘en_core_web_sm’. It doesn’t seem to be a Python package or a valid…

【Java】插入排序和希尔排序---图解超详细

目录 插入排序 插入排序的核心图解 希尔排序 希尔排序详细图解 插入排序 插入排序的交换精髓在于 每次随着i的扩大,i走过的路径都是有序的,这和冒泡的思想有异曲同工之处,冒泡是i走一次,数组的最后变成有序的,而插入排序是 插入排序是 i 在前面 j在后面 插入排序的核心图解…

C- 符号

文章目录 符号#ifdef-#endif\接续符转义旋转光标数字倒计时 单引号-双引号逻辑运算符&& ||短路 位运算符异或位运算最好使用定义好的宏左移右移 后置前置复杂表达式 取整0向取整(C中默认取整方式)floor地板取整ceilround 四舍五入 取模取余和取模一样吗? 运算符优先级…

两小时让你全方位的认识文件(一)

想必友友们在生活中经常会使用到各种各样的文件,那么我们是否了解它其中的奥秘呢,今天阿博就带领友友们深入地走入文件🛩️🛩️🛩️ 文章目录 一.为什么使用文件二.什么是文件三.文件的打开和关闭四.文件的顺序读写 一…

网页自动化工具DrissionPage

逛Github时偶然看到的开源项目,DrissionPage是一款新的基于 python 的网页自动化工具。 笔者已测试过,给大家推荐下。 项目地址:https://gitee.com/g1879/DrissionPage 安装测试 安装命令 pip install DrissionPage测试 from Drissio…

unity | 处理string常用的知识(持续更新)

一、转义字符和的用法 1.常规用法 我们现在有一行字,但是我对它的格式之类的有要求 例:天无绝人之路,条条道路通罗马。 我想打成: 天无绝人之路, 条条道路通罗马。 换行前,写法是: string s …

科海思—美国杜笙Tulsimer中国区总代理,制糖脱色树脂A-722

一、产品介绍 具有控制孔径的大孔强碱性Ⅰ型阴特种脱色用离子交换树脂 Tulsimer A-722是一款具有便于颜色和有机物去除的控制孔径的,专门开发的大孔强碱性Ⅰ型阴离子交换树脂。 Tulsimer A-722 (氯型)专门应用于糖浆脱色。 Tulsimer A…

Python学习简记

常用数据类型 整数类型int 二进制以0b开头八进制以0o开头十六进制以0x开头 这里还有一个值得注意的点:python中的整型是“无限长”的,因此它可以表示任何数 浮点数 python中只有float作为浮点数,没有double 主要注意python中对浮点数与Decima…

Spring系统架构与主要概念

Spring系统架构与主要概念 Spring Framework系统架构Core Container 核心容器AOP 层数据层Web层测试层 业务逻辑Spring之前遇到的问题解决方案 Spring核心概念IOC(Inversion of Control)控制反转DI(Dependency Injection)依赖注入…

SRv6实践项目(四):基于YANG的配置下发

在本章节,主要是了解YANG是什么,以及基于YANG下发配置的工作原理: 1.什么是YANG 在介绍之前,为了给大家一个最直观的感受,我们打开yang工具,它被打包成一个容器了,可以轻松的使用,…

完美解决丨1. **`SyntaxError: invalid syntax`**

SyntaxError: invalid syntax 因为没有符合语法要求,导致报错。 解决办法: 语法错误的原因主要是代码的风格,例如: 左括号或者右括号没有配对;左括号或者右括号没有放在语句的正确位置;缺少冒号&#xff1…

Window10下安装DPDK

由于我装的是vs2019,打开Visual Studio Installer,在可选下,选择Windows 10 SDK,点击修改。 右键此电脑属性,查看Windows10版本。 安装WDK,打开网址https://learn.microsoft.com/zh-cn/windows-hardware/…

计算机系统-链接

例行前言: 本篇不是学习课程时的笔记,是重看这本书时的简记。对于学习本课程的同学,未涉及的内容不代表考试不涉及,部分省略的部分是在该课程的讨论课中学习的(PIC,放出了我在讨论课中的PPT作为参考),核心…

Sentinel使用

文章目录 一. 初识Sentinel1. 雪崩问题及解决方案2. 服务保护技术对比3. Sentinel介绍和安装4. 微服务整合Sentinel 二. 限流规则1. 快速入门2. 流控模式3. 流控效果4. 热点参数限流 三. 隔离与降级—调用方保护方案1. FeignClinet整合sentinel2. 线程隔离(舱壁模式…

vue3中的单文件组件<script setup>和setup函数区别 详解

文章目录 简介基本语法变量和方法多的使用注册组件动态组件使用外部文件方法组件通信props与defineProps、emitdefineEmitsdefineExpose 获取 attrs、slots 和useAttrs、useSlots 方法与普通的 < script > 一起使用v-bind() CSS变量注入style的新特性之global对await异步…

行业认可,知道创宇入选安全牛第十版全景图30个细分领域

近日&#xff0c;国内网络安全领域专业媒体安全牛正式发布了第十版《中国网络安全行业全景图》&#xff08;以下简称“全景图”&#xff09;&#xff0c;知道创宇凭借过硬的技术实力及成熟的市场应用获得行业认可&#xff0c;入围10项一级安全分类共计30项二级细分领域&#xf…

ASEMI代理ADI亚德诺AD8130ARZ-REEL7车规级芯片

编辑-Z AD8130ARZ-REEL7芯片参数&#xff1a; 型号&#xff1a;AD8130ARZ-REEL7 −3dB带宽&#xff1a;250MHz 0.1 dB平坦度的带宽&#xff1a;25MHz 斜率&#xff1a;930V/μs 建立时间&#xff1a;20ns 上升和下降时间&#xff1a;1.5ns 输出超速恢复&#xff1a;30n…

访学案例分享|经济学老师获英国两高校邀请函

D老师所在国内高校鼓励教职员工通过各种渠道公派或者自筹经费出国访学进修。在考虑了学校要求及个人条件后&#xff0c;其决定用自费方式赴英国访学。我们分别获得了英国利兹贝克特大学和邓迪大学的邀请函&#xff0c;最终D老师顺利过签&#xff0c;如期出国。 D老师背景&#…

网络编程【UDP数据报套接字编程】

目录 1.网络编程基础 1.1 为什么需要网络编程&#xff1f; 1.2 什么是网络编程 1.3 网络编程中的基本概念 2.Socket套接字 2.1 分类 3.UDP数据报套接字编程 3.1 DatagramSocket API 3.2 DatagramPacket API 3.3 基于 UDP socket 写一个简单的回显客户端服务器程序&am…