网站首页 > 技术文章 正文
1.介绍
机器学习是一个迭代过程。
你会遇到一些问题,例如使用什么预测变量、使用什么类型的模型、使用什么参数等。到目前为止,都是以数据驱动的方式做出了这些选择,使用验证(或保持)集测量模型质量。
但这种方法也有一些缺点。假设有一个包含5000行的数据集。通常,将保留大约20%的数据作为验证数据集,即1000行。但这给确定模型分数留下了一些随机的机会。也就是说,一个模型可能在一组1000行上做得很好,然而在不同的1000行上是不准确的。
在极端情况下,可以想象验证集中只有一行数据。如果你比较不同的模型,哪一个能在单个数据点上做出最好的预测将主要取决于运气!
一般来说,验证集越大,模型质量度量中的随机性(也称为“噪声”)就越小,也就越可靠。不幸的是,我们只能通过从训练数据中删除行来获得一个大的验证集,而较小的训练数据集意味着更糟糕的模型!
2.交叉验证是什么
在交叉验证中,我们在不同的数据子集上运行我们的建模过程,以获得模型质量的多种度量。
例如,我们可以首先将数据分成5个部分,每个部分占整个数据集的20%。在这种情况下,我们说我们已经将数据分成5个“折叠”。
然后,我们对每个折叠进行一个实验:
- 在实验1中,我们使用第一个折叠作为验证集,其他的都作为训练数据。这为我们提供了一个基于20%验证集的模型质量度量。
- 在实验2中,我们从第二次折叠中取出数据(除了第二次折叠外,其他的都用来训练模型)。然后使用训练集得到模型质量的第二个估计。
我们重复这个过程,每叠一次作为支撑物。把这些放在一起,100%的数据在某个点上被用作支撑,我们最终得到一个基于数据集中所有行的模型质量度量(即使我们不同时使用所有行)。
3.什么时候使用交叉验证
交叉验证提供了对模型质量的更精确的度量,这在大量建模决策时尤为重要。然而,它可能需要更长的时间来运行,因为它估计了多个模型(每个折叠一个)。
因此,考虑到这些权衡,应该在什么时候使用每种方法?
- 对于小数据集,额外的计算负担不是什么大问题,应该运行交叉验证。
- 对于较大的数据集,一个验证集就足够了。代码将运行得更快,而且可能拥有足够的数据,因此不需要重新使用其中的一些数据来进行维护。
对于大数据集和小数据集的构成没有简单的界限。但是,如果你的模型只需几分钟或更少的时间就可以运行,那么切换到交叉验证可能是值得的。
或者,你可以进行交叉验证,看看每个实验的分数是否接近。如果每个实验产生相同的结果,一个单一的验证集可能就足够了。
4.例子
猜你喜欢
- 2024-12-05 快乐8第24272期训练与验证
- 2024-12-05 一文彻底搞懂自动机器学习AutoML:TPOT
- 2024-12-05 中安表单识别AI训练平台的识别准确率是否可以通过测试来验证?
- 2024-12-05 基于LIBS技术的煤炭灰分、挥发分和热值定量分析及特征工程研究
- 2024-12-05 样本分布不平衡,机器学习准确率高又有什么用?
- 2024-12-05 详解3类「人工智能数据集」,数据划分原则,交叉验证法
- 2024-12-05 AI实践 100问:训练集、验证集、测试集
- 2024-12-05 scikit 模型堆叠,
- 2024-12-05 机器学习中必学的四种交叉验证技术
- 2024-12-05 python机器学习:机器学习模型评价-交叉验证与留一验证
- 1510℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 541℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 497℃MySQL service启动脚本浅析(r12笔记第59天)
- 477℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 475℃启用MySQL查询缓存(mysql8.0查询缓存)
- 454℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 434℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 432℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)