机器学习常识 4: 分类问题的训练与测试

news/2024/6/17 2:59:20 标签: 机器学习, 分类, 人工智能

摘要: 本贴以最为典型的分类问题为例, 描述训练与测试.

1. 基本概念

上午来了 60 个患者, 根据他们的各项检测指标 (即数据), 主治医生给出了诊断结论 (如是否患病, 以及患哪种病), 但不会告诉实习生诊断的方法. 实习生根据这 60 条数据, 归纳总结出了诊断模型 (方法), 这是一个从数据中学习的过程. 下午来了 40 个患者, 根据他们的各项检测指标, 以及自己的诊断模型, 实习生给出了诊断结论. 主治医生比对实习生的结论与标准答案, 对实习生的学习能力进行评价. 例如, 实习生弄错了 5 个, 则其错误率为 5/40 = 12.5%, 准确率则为 87.5%.
几个相关术语:

  • 上午 60 条数据是主治医生给定的, 因此称为训练集.
  • 下午 40 条数据是用于考实习生的, 因此称为测试集.
  • 让计算机作为实习生, 就称为 机器学习.
  • 由于主治医生 (supervisor) 给定了训练集的所有标签, 因此称为监督学习 (supervised learning).

2. 训练、测试的不同方案

  • 第 1 部分描述的方案称为训练集与测试集划分方案 (split-in-two).

不同学习方法可能对于不同的训练数据的适应性也不同, 例如, 使用 1-60 号训练, 61-100 号测试的时候, A 学习器优于 B 学习器; 但使用 41-100 号训练, 1-40 号测试的时候, B 优于 A. 为弥补这种数据集划分导致的不公平, 可以使用如下方式:

  • 多次随机划分训练集与测试集 (random splitting). 将 split-in-two 重复 10 次, 每次随机进行训练集与测试集的划分. 获得 10 个错误率后, 可以求其均值与方差. 这是论文结果中 82. 5 ± 0.4 82.5_{\pm 0.4} 82.5±0.4 这类准确率的来历.
  • 交叉验证 (cross validation). 数据集中有 100 条数据. 将其分为 5 份, 即每份 20 条数据. 每次选择其中 4 份 (即 80 数据) 进行训练, 其它 1 份 (即 20 条数据) 进行测试. 这样, 所有的数据都被测试过一次. 这种方案被称为 5 折交叉验证 (5 folds cross validation, 5-cv).
  • 留一法 (leave-one-out). 这是交叉验证的极端情况. 将数据分为 100 份, 即每份只有一条数据. 这种方式最为公平, 但也最为耗时, 因为要训练-测试 100 次.

另一种极端的方案被称为使用训练集进行测试 (use training set). 主治医生给了实习生 100 条带标签的数据, 实习生学习到诊断模型后, 使用它对这同样的100 条数据进行分类. 这也是有意义的.

3. 拟合能力与泛化能力

本节的内容从逻辑上来说, 应该归于上一节末尾. 但它们太重要了, 以至于我不得单独使用一节.

  • 当测试集与训练集相同时, 考查的是模型的拟合能力.
    很多机器学习模型本质上从输入数据到输出标签的一个函数 (映射). 从理论上讲, 训练的过程, 就是从函数簇中选择对训练数据拟合得最好的那个函数. 从实践上讲, 训练就是构造该函数的过程.
  • 当测试集与训练集不同时, 考查的是模型的泛化能力. 提升泛化能力 (更好地为其他就诊者服务) 才是机器学习的真正目的.

如果实习生在老师教的那些样本上表现非常好, 但在新的样本上表现比较差, 就是产生了 过拟合 (over-fitting).
如何防止过拟合, 适当降低拟合能力以获得更好的泛化能力, 是机器学习的核心.

4. 验证集

数据集中有 100 条数据. 其中 70 条构成训练集, 20 条作为验证集, 10 条作为测试集. 根据训练集获得一个模型, 在验证集中看效果, 如果不行的话, 就再构建另一个模型, 直到获得满意的模型. 最终仍然在测试集上评估预测模型性能.
如果有些超参数 (与预测模型相关, 如 k k kNN 的 k k k 值, 只有在后面讲了), 则可以通过验证集来调整.
可以通过如下例子进行理解:

  • 训练集相当于平时的例题, 直接提供标准答案.
  • 验证集相当于平时的习题/测验题, 做完题后给你看标准答案.
  • 测试集相当于高考题, 只会告诉你考分, 不需要告诉你答案.

5. 其它说明

  • 测试集仅仅是对模型的预测能力进行一定的评估. 现实生活中, 用于预测的数据, 我们很可能永远得不到标准答案.

http://www.niftyadmin.cn/n/361206.html

相关文章

Golang每日一练(leetDay0077) 存在重复元素、天际线问题

目录 217. 存在重复元素 Contains Duplicate 🌟 218. 天际线问题 The Skyline Problem 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 …

Numpy入门看这一篇就够了【史上入门最简单,开袋即食】

一边学习一边分享,好记性不如烂笔头 目录 一边学习一边分享,好记性不如烂笔头 NumPy问题思考: numpy是什么? 为什么要学习numpy? numpy是怎么组成的?特点是什么? numpy的应用场景有哪些&a…

chatgpt赋能python:Python单词库的重要性

Python单词库的重要性 Python是一种高级编程语言,被广泛用于应用程序开发、网络编程、数据科学和人工智能开发等领域。而在Python编程中,单词库(或词典)的重要性不言而喻。单词库就是存放Python程序中经常使用的关键字、方法名、函数名等词汇的地方。本…

chatgpt赋能python:Python单行for:如何简化你的代码

Python单行for:如何简化你的代码 在Python编程中,for循环是必不可少的一部分,它可以用于遍历列表、元组和字典等各种数据类型。而Python单行for则是一种更加简单、更加紧凑的语法形式,可以让你更加高效地遍历和处理数据。 什么是…

chatgpt赋能python:Python取两者之间的最大值

Python取两者之间的最大值 介绍 Python是一种高级编程语言,广泛应用于计算机科学、人工智能、数据科学、机器学习等不同领域。它的易用性和灵活性使它成为许多开发人员首选的工具。本篇文章将介绍如何使用Python来取两者之间的最大值。 如何取两者之间的最大值 …

【Mysql】什么是大事务?以及大事务产生的问题

文章目录 一、定义二、大事务风险三、避免大事务四、案例创建表首先插入一条记录接着反复执行如下SQL,插入大量数据记录再次执行插入时,耗时会是几十秒,甚至几分钟:执行过程耗时较长时,模拟的也就是大事务。查看大事务 五、大表带…

make的路径搜索

文章目录 前言一、VPATH二、vpath三、vpath 与 VPATH 的差别四、GPATH 用法总结 前言 在大型软件项目中,通常会存在多个目录,包含有源代码、头文件、库文件等不同类型的文件。在编译或链接时,需要指定相应的文件路径才能正确地进行构建。但是…

Linux系统初始化命令的备忘单,Linux运维工程师收藏!

在管理和维护Linux系统时,有一些常用的命令可以帮助您进行系统初始化和配置。这些命令涵盖了各种任务,包括系统设置、用户管理、软件安装和网络配置等。 本文将为您提供一个Linux系统初始化命令的备忘单,以便在需要时方便查阅和使用。 系统设…