交叉验证--说不清道不明的故事

2023-11-10 03:59

本文主要是介绍交叉验证--说不清道不明的故事,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

“你以为你懂了,可是别人分分钟说的你哑口无言;你以为你没懂,其实你也不知道自己懂没懂。”

一、一文看懂 AI 数据集:训练集、验证集、测试集
这里对验证集的作用总结是对的,但是交叉验证的讲解我觉得是不对的,所以交叉验证的内容别看这里

二、交叉验证的种类及其优缺点

首先,讲一个注意点:
做训练的时候,数据的训练数据和验证数据集在理想情况下数据分布应该一致。
交叉验证的种类有哪些?这是一个很容易犯错的问题。其实,并不是只有常用的K折交叉验证属于这个类别,其余几类也属于这一范畴。链接一的这一部分内容整理的非常好
(1)留出法
在机器学习任务中,拿到数据后,我们首先会将原始数据集分为三部分:训练集、验证集和测试集。
训练集用于训练模型,验证集用于模型的参数选择配置,测试集对于模型来说是未知数据,用于评估模型的泛化能力。
缺点是:只做一次分割,当原始数据集比较小时,分割后数据的分布是否和原始数据集的分布相同等因素比较敏感,不同的划分会得到不同的最优模型,而且分成三个集合后,用于训练的数据更少了。
(2)K折交叉验证,其内容来源于链接一和链接三
假设有n个观测值,我们将其均分为K组。用其中K-1组来训练模型,然后用训练得到的模型对剩下的一组进行预测,并在该组上计算预测误差。因为从K组中选择K-1组有K种选择,也可以理解为这K个组都有可能成为剩下的那一个预测组。所以便会计算K次的预测误差,对这K次的预测误差平均便得到一个交叉验证误差。以上过程便称为K-fold交叉验证。
其实,“交叉验证”中的“交叉”2字的意思就是:固定数据在不同K折中的地位不一样,可能是验证集,也可能是训练集。
优点:k 折交叉验证通过对 k 个不同分组训练的结果进行平均来减少方差,因此模型的性能对数据的划分就不那么敏感。
K折交叉验证的极致是“留一法”
(3)提靴法
缺点:这样产生的训练集的数据分布和原数据集的不一样了,会引入估计偏差。
此种方法不是很常用,除非数据量真的很少。

三、交叉验证的意义

1.作用一总结:来源于链接一
多用于数据很少的场合,防止过拟合。一般做深度学习跑标准数据集的时候用不到。
(1)将所有数据多喂入模型,可以让模型从有限的数据中获取尽可能多的有效信息。
(2)做训练中,每一份数据都有机会做验证集,可以根据验证集表现发现出数据分布不一致的情况,更好的考察模型对各种新数据的表现,防止过拟和。
2. 作用二总结:来源于链接一和链接三
作用:找到合适的模型参数
在模型选择时,假设模型序列有个tuning parameter,不同的tuning parameter便确定一个模型,计算其交叉验证误差,最后选择使得交叉验证误差最小的那一个tuning parameter。这便是模型选择过程。
在这里插入图片描述

这篇关于交叉验证--说不清道不明的故事的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/380282

相关文章

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

React 笔记 父子组件传值 | 父组件调用子组件数据 | defaultProps | propsType合法性验证

1.通过props实现父组件像子组件传值 、方法、甚至整个父组件 传递整个父组件则   [变量名]={this} import Header from "./Header"render(){return(<Header msg={"我是props传递的数据"}/>)} import React,{Component} from "react";class Header extends

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,

交叉编译python

1.解决python源码,进入源码目录 2.先编译本地版本的python。直接使用命令 ./configure --prefix=/home/KAS-300/python3.8 --enable-optimizationsmake -j8make install 3.把生成的python可执行文件临时加入PATH export PATH=/home/KAS-300/python3.8/