当前位置:网站首页>k折交叉验证(k-fold Cross-validation)
k折交叉验证(k-fold Cross-validation)
2022-07-30 05:38:00 【向大厂出发】
一、基本概述
交叉验证是在机器学习建立模型和验证模型参数时常用的办法,一般被用于评估一个机器学习模型的表现。更多的情况下,我们也用交叉验证来进行模型选择(model selection)。
交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。
那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。
k折交叉验证( k-Folder Cross Validation),经常会用到的。 k折交叉验证先将数据集 D随机划分为 k个大小相同的互斥子集,即 ,每次随机的选择 k-1份作为训练集,剩下的1份做测试集。当这一轮完成后,重新随机选择 k份来训练数据。若干轮(小于 k )之后,选择损失函数评估最优的模型和参数。注意,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k取值。
二、基本步骤
1、首先随机地将数据集切分为 k 个互不相交的大小相同的子集;
2、然后将 k-1 个子集当成训练集训练模型,剩下的 (held out) 一个子集当测试集测试模型;
3、将上一步对可能的 k 种选择重复进行 (每次挑一个不同的子集做测试集);
4、这样就训练了 k 个模型,每个模型都在相应的测试集上计算测试误差,得到了 k 个测试误差,对这 k 次的测试误差取平均便得到一个交叉验证误差。这便是交叉验证的过程。计算平均测试误差 (交叉验证误差) 来评估当前参数下的模型性能。
在模型选择时,假设模型有许多 tuning parameter 可供调参,一组 tuning parameter 便确定一个模型,计算其交叉验证误差,最后选择使得交叉验证误差最小的那一组 tuning parameter。这便是模型选择过程。
k 一般大于等于2,实际操作时一般从3开始取,只有在原始数据集样本数量小的时候才会尝试取2。k折交叉验证可以有效的避免过拟合以及欠拟合状态的发生,最后得到的结果也比较具有说服性。
k折交叉验证最大的优点:
所有数据都会参与到训练和预测中,有效避免过拟合,充分体现了交叉的思想。
交叉验证可能存在 bias 或者 variance。如果我们提高切分的数量 k,variance 会上升但 bias 可能会下降。相反得,如果降低 k,bias 可能会上升但 variance 会下降。bias-variance tradeoff 是一个有趣的问题,我们希望模型的 bias 和 variance 都很低,但有时候做不到,只好权衡利弊,选取他们二者的平衡点。通常使用10折交叉验证,当然这也取决于训练数据的样本数量。
三、用途
1、交叉验证可以有效评估模型的质量
2、交叉验证可以有效选择在数据集上表现最好的模型
3、交叉验证可以有效避免过拟合和欠拟合
• 欠拟合(Underfitting)是指模型不能获取数据集的主要信息,在训练集及测试集上的表示都十分糟糕。
• 过拟合(Overfitting)是指模型不仅获取了数据集的信息还提取了噪声数据的信息是的模型在训练集有非常好的表现但在测试集上的表现及其糟糕。
所以可以得出一个较为草率的结论:一个最佳的ML模型在训练集和测试集上都有较好的表现。边栏推荐
- MySQL的 DDL和DML和DQL的基本语法
- [Image processing] Image skeleton extraction based on central axis transformation with matlab code
- JVM 垃圾回收 超详细学习笔记(二)
- Seata exception: endpoint format should like ip:port
- navicat连接MySQL报错:1045 - Access denied for user ‘root‘@‘localhost‘ (using password YES)
- 从底层结构开始学习FPGA(6)----分布式RAM(DRAM,Distributed RAM)
- 坠落的蚂蚁(北京大学考研机试题)
- 手把手教你彻底卸载MySQL
- 解决phpstudy无法启动MySQL服务
- This dependency was not found:
猜你喜欢

Programmers make money and practice, teach you how to do paid courses, self-media, paid articles and paid technical courses to make money

JVM之GC 调优基础知识(一)

net start mysql MySQL service is starting. MySQL service failed to start.The service did not report any errors.

St. Regis Takeaway Project: New dishes and dishes paged query

Error: npm ERR code EPERM

2022年比若依更香的开源项目

2022 Pengcheng Cup web

JVM之GC 调优工具 Arthas 实战使用(二)

Personal blog system (with source code)

MySQL Soul 16 Questions, how many questions can you last?
随机推荐
MySQL的存储过程
JVM面试总结
108. 将有序数组转换为二叉搜索树
St. Regis Takeaway Project: New dishes and dishes paged query
2022年SQL大厂高频实战面试题(详细解析)
Summary of SQL classic interview questions in 2022 (with analysis)
Programmers make money and practice, teach you how to do paid courses, self-media, paid articles and paid technical courses to make money
Error: npm ERR code EPERM
MySQL (2)
[Koltin Flow (2)] The end operator of the Flow operator
[详解C语言]一文带你玩转数组
从驱动表和被驱动表来快速理解MySQL中的内连接和外连接
【小程序项目开发 -- 京东商城】uni-app 商品分类页面(下)
4、nerf(pytorch)
cnpm installation steps
如何使用FirewallD限制网络访问
从字节码角度带你彻底理解i++与++i
【飞控开发基础教程9】疯壳·开源编队无人机-PWM(电机控制)
net start mysql MySQL service is starting. MySQL service failed to start.The service did not report any errors.
[Koltin Flow (1)] Five ways to create flow