网站首页 > 技术文章 正文
本文旨在解释许多交叉验证技术中的一些技术及其工作原理。
介绍
考虑在数据集上创建模型,但它在看不见的数据上失败。
我们不能简单地将模型拟合到我们的训练数据中,然后坐等它在真实的、看不见的数据上完美运行。
这是一个过度拟合的例子,我们的模型已经提取了训练数据中的所有模式和噪声。为了防止这种情况发生,我们需要一种方法来确保我们的模型已经捕获了大多数模式并且不会拾取数据中的每一点噪声(低偏差和低方差)。处理此问题的众多技术之一是交叉验证。
了解交叉验证
假设在一个特定的数据集中,我们有 1000 条记录,我们train_test_split()在上面执行。假设我们有 70% 的训练数据和 30% 的测试数据random_state = 0,这些参数导致 85% 的准确度。现在,如果我们设置random_state = 50假设准确度提高到 87%。
这意味着如果我们继续选择不同random_state的精度值,就会发生波动。为了防止这种情况,一种称为交叉验证的技术开始发挥作用。
交叉验证的类型
- 留一交叉验证 (LOOCV)
在LOOCV中,我们选择 1 个数据点作为测试,剩下的所有数据都将是第一次迭代中的训练数据。在下一次迭代中,我们将选择下一个数据点作为测试,其余的作为训练数据。我们将对整个数据集重复此操作,以便在最终迭代中选择最后一个数据点作为测试。
通常,要计算迭代交叉验证过程的交叉验证 R2,您需要计算每次迭代的 R2 分数并取它们的平均值。
尽管它会导致对模型性能的可靠且无偏的估计,但它的执行计算成本很高。
2. K-fold 交叉验证
在K-fold CV中,我们将数据集拆分为 k 个子集(称为折叠),然后我们对所有子集进行训练,但留下一个 (k-1) 个子集用于评估训练后的模型。
假设我们有 1000 条记录并且我们的 K=5。这个 K 值意味着我们有 5 次迭代。对于测试数据要考虑的第一次迭代的数据点数从一开始就是 1000/5=200。然后对于下一次迭代,随后的 200 个数据点将被视为测试,依此类推。
为了计算整体准确度,我们计算每次迭代的准确度,然后取其平均值。
我们可以从这个过程中获得的最小准确度将是所有迭代中产生的最低准确度,同样,最大准确度将是所有迭代中产生的最高准确度。
3.分层交叉验证
分层 CV是常规 k 折交叉验证的扩展,但专门针对分类问题,其中的分割不是完全随机的,目标类之间的比率在每个折中与在完整数据集中的比率相同。
假设我们有 1000 条记录,其中包含 600 条是和 400 条否。因此,在每个实验中,它都会确保填充到训练和测试中的随机样本的方式是,每个类的至少一些实例将是存在于训练和测试分裂中。
4.时间序列交叉验证
在时间序列 CV中有一系列测试集,每个测试集都包含一个观察值。相应的训练集仅包含在形成测试集的观察之前发生的观察。因此,未来的观察不能用于构建预测。
预测精度是通过对测试集进行平均来计算的。此过程有时被称为“对滚动预测原点的评估”,因为预测所基于的“原点”会及时前滚。
使用 Scikit-learn 的实际实现的代码请关注我们或联系作者获取。
结论
在机器学习中,我们通常不想要在训练集上表现最好的算法或模型。相反,我们需要一个在测试集上表现出色的模型,以及一个在给定新输入数据时始终表现良好的模型。交叉验证是确保我们能够识别此类算法或模型的关键步骤。
- 上一篇: python机器学习:机器学习模型评价-交叉验证与留一验证
- 下一篇: scikit 模型堆叠,
猜你喜欢
- 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 交叉验证(Cross-Validation)
- 2024-12-05 AI实践 100问:训练集、验证集、测试集
- 2024-12-05 scikit 模型堆叠,
- 2024-12-05 python机器学习:机器学习模型评价-交叉验证与留一验证
- 1510℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 541℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 497℃MySQL service启动脚本浅析(r12笔记第59天)
- 477℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 475℃启用MySQL查询缓存(mysql8.0查询缓存)
- 455℃「赵强老师」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)