使用验证集、训练集和测试集之间的顺序

2023-12-09

我试图了解机器学习中模型评估和验证的过程。具体来说,必须按什么顺序以及如何使用训练、验证和测试集。

假设我有一个数据集,我想使用线性回归。我在各种多项式次数(超参数)之间犹豫不决。

In 这篇维基百科文章,这似乎暗示顺序应该是:

  1. 将数据分为训练集、验证集和测试集
  2. 使用训练集来拟合模型(找到最佳参数:多项式的系数)。
  3. 然后,使用验证集来找到最佳的超参数(在本例中为多项式次数)(维基百科文章说:“成功地,拟合模型用于预测称为验证数据集的第二个数据集中的观测响应”)
  4. 最后,使用测试集对与训练集拟合的模型进行评分。

然而,这对我来说似乎很奇怪:如果您还没有选择超参数(在本例中为多项式),如何使您的模型与训练集相匹配?

我看到三种替代方法,我不确定它们是否正确。

第一种方法

  1. 将数据分为训练集、验证集和测试集
  2. 对于每个多项式次数,拟合模型与训练集并使用验证集为其评分。
  3. 对于得分最高的多项式次数,将模型与训练集进行拟合。
  4. 使用测试集进行评估

第二种方法

  1. 将数据分为训练集、验证集和测试集
  2. 对于每个多项式次数,使用交叉验证仅在验证集上对模型进行拟合和评分
  3. 对于得分最高的多项式次数,将模型与训练集进行拟合。
  4. 使用测试集进行评估

第三种方法

  1. 将数据拆分为只有两套:训练/验证集和测试集
  2. 对于每个多项式次数,使用交叉验证仅在训练/验证集上对模型进行拟合和评分
  3. 对于具有最佳分数的多项式次数,将模型与训练/验证集进行拟合。
  4. 使用测试集进行评估

所以问题是:

  • 维基百科的文章是错误的还是我遗漏了什么?
  • 我设想的三种方法是否正确?哪一个会更可取?还有比这三种方法更好的方法吗?

维基百科的文章并没有错;根据我自己的经验,这是机器学习新手经常感到困惑的地方。

有两种不同的方法可以解决该问题:

  • Either你使用显式的验证设置进行超参数搜索和调整
  • Or你使用交叉验证

所以,标准点是你总是把一部分数据放在一边test放;这样做的目的只是为了最终评估模型的性能(即不是来回和多次评估,因为在这种情况下,您将测试集用作验证集,这是不好的做法)。

完成此操作后,您可以选择是否剪切剩余数据的另一部分以用作单独的数据验证设置,或者您是否将继续进行交叉验证(在这种情况下,不需要单独和fixed需要验证集)。

因此,本质上,您的第一种方法和第三种方法都是有效的(并且是相互排斥的,即您应该选择要使用的方法)。第二个,正如您所描述的那样(仅在验证集中使用 CV?),当然不是(如上所述,当您选择使用 CV 时,您不会分配单独的验证集)。除了简要提及交叉验证之外,维基百科文章实际上描述的是您的第一种方法。

当然,哪种方法“更好”的问题不能在这种普遍性水平上得到回答;这两种方法确实有效,并根据具体情况使用。非常宽松地说,我想说在大多数“传统”(即非深度学习)机器学习设置中,大多数人选择交叉验证;但在某些情况下这是不切实际的(大多数深度学习设置,再次松散地说),人们会使用单独的验证集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用验证集、训练集和测试集之间的顺序 的相关文章

随机推荐

  • C 库函数 fflush(stdin) 的替代方案

    谁能解释一下下面的代码是如何解释的 我真的不明白 while c getchar n c EOF 我知道它用于刷新输入流并且可以用标准 C 库函数替换 fflush stdin while c getchar n c EOF 这会读取输入字
  • AADSTS50020:租户中不存在用户帐户

    我能够将另一个租户创建的应用程序注册为我自己租户的企业应用程序 我以用户身份登录该应用程序 但收到以下错误 AADSTS50020 用户帐户 电子邮件受保护 来自身份提供商 https sts windows net aaaaaaaa bb
  • 如何将 std::string 转换为 double

    通常 当我用 C 编写任何内容时 我需要将char进入一个int我只是做了一个新的int等于字符 我使用了代码 片段 string word openfile gt gt word double lol word 我收到的错误是 Code1
  • 如何正确地将数据保存到数据库中?

    我通常将新数据保存到数据库中 如下所示 this gt MyTable gt set array id gt id code gt temp code status gt status age gt age location gt loca
  • 如何使用 iTextSharp 转换为 PDF

    ASP
  • 从 Parse.com 检索 PFFile 时“在解包可选值时意外发现 nil”

    当我检索 Parse com 中存储的 PFFile 时遇到问题 let user PFUser currentUser let userImageFile user profileImage as PFFile userImageFile
  • MQQueueManager消息池

    我过去使用 RabbitMq 作为 MessageQueue 当收到消息时触发事件非常简单 我查看了 IBM 安装程序提供的 NET 源代码 但发现处理它的方法不太好 查看示例 SimpleSubscribe 它做了这样的事情来池化 get
  • 如何维护数据库结构的修订控制?

    跟踪项目数据库结构更改的最简单方法是什么 当我更改数据库的某些内容 例如 添加新表 向现有表添加新字段 添加索引等 时 我希望将其传播到团队的其他成员 并最终传播到生产服务器 最小的麻烦和努力 目前 解决方案相当薄弱 并且依赖于人们记住做事
  • 为什么 TypeScript 无法从过滤数组推断类型?

    下面是一些示例代码 TypeScript 推断类型validStudents as Students 对于任何阅读代码的人来说 显而易见的是 因为所有无效记录都被过滤掉了 validStudents可以安全地被认为具有某种类型ValidSt
  • 递归执行广度优先搜索

    假设您想实现二叉树的广度优先搜索递归地 你会怎样做呢 是否可以仅使用调用堆栈作为辅助存储 我假设这只是某种思维练习 甚至是一个技巧作业 面试问题 但我想我可以想象一些奇怪的场景 由于某种原因你不允许任何堆空间 一些非常糟糕的习惯 内存管理器
  • 在VBA中修改现有的excel连接名称

    我需要更新 Excel 工作簿的 SQL 连接的连接名称 这是我的尝试 我已经能够通过执行标准替换来修改连接字符串和命令文本 Sub ConnectionString modify Dim i As Long Dim cnt As Long
  • 我想使用 .htaccess 从网址中删除问号和 .php 扩展名

    我在 htaccess 中遇到重定向 URL 问题 我想从 URL 中删除 php 和问号 例如 www example com test php id 12 to www example com test 12需要这样的格式 我尝试在我的
  • 获取QTextEdit选择的边界框

    我试图获取存储在列表中的一系列文本选择的边界框 边界框是可以包含整个选择的最小矩形 列表中的每个项目都有一个起始点和结束点 以字符数为单位从起始点开始计算QTextEdit窗口和字母标识符 QTextEdit cursorRect curs
  • DT 默认折叠所有行组

    我试图默认情况下使数据表中的所有行组折叠 我目前的实施 library shiny library DT ui lt fluidPage Application title titlePanel Collapse Expand table
  • 如何从 PHP 网站向 iOS 和 Android 发送推送通知?

    如何从 PHP 网站向 iOS 设备和 Android 设备发送推送通知 有这方面的教程吗 您可以使用多种预制服务来推送通知 例如 Firebase Messaging One Signal 等 有关与 PHP 集成的 Firebase 云
  • 在 iPhone OS 4.0 中以编程方式获取自己的电话号码

    我正在为越狱手机开发一个iPhone应用程序 在这个应用程序中我想获取用户的电话号码 我浏览了整个 stackoverflow com 并找到了一些相关答案 但所有这些答案都已过时 并且不再适用于 iOS 4 0 这个问题最著名的解决方案是
  • 简单的 CSS 转换 - 没有任何效果

    我正在处理一个具有悬停时消失的渐变的图像 但是 我无法对此进行转换 我已经尝试了我所知道的所有 webkit 转换 但它似乎不起作用 这是 HTML a href http calvarygigharbor com heavenly hit
  • 当分支未显示在 gitbranch -l 中时更改分支

    当我克隆远程存储库时 我使用了以下命令 git clone b mybranch single branch git sub domain com repo git 之后 当我做了一个git branch l它只是向我展示了我克隆的分支 现
  • 对象引用丢失,但保留资源

    IndentedTextWriter tw new IndentedTextWriter internalTW tw 引用的对象丢失 但相关资源未在此处处置 TW 是文本编写器 其中internalTW是TextWriter OleDbCo
  • 使用验证集、训练集和测试集之间的顺序

    我试图了解机器学习中模型评估和验证的过程 具体来说 必须按什么顺序以及如何使用训练 验证和测试集 假设我有一个数据集 我想使用线性回归 我在各种多项式次数 超参数 之间犹豫不决 In 这篇维基百科文章 这似乎暗示顺序应该是 将数据分为训练集