机器学习 (5)——模型评估方法

本贴最后更新于 2364 天前,其中的信息可能已经时过境迁

0x00 模型评估与选择

在机器学习中,我们需要对使用的模型进行评估,对误差等进行分析,来选择一个预测准确率最高的模型。

0x01 误差

我们把学习器的实际预测输出与样本的真实输出之间的差异称为误差。

  • 经验误差:学习器在训练集上的误差称为训练误差或经验误差。
  • 泛化误差:将训练好的模型用在新样本上的误差称为泛化误差。

机器学习的目的是为了预测新样本的情况,所以我们需要在新样本上表现很好的学习器,即需要得到一个泛化误差小的学习器。

0x02 过拟合与欠拟合

  • 过拟合:学习器把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,导致泛化性能下降。一般是由于学习能力过强,将训练样本所包含的不太一般的性质都学到了。
  • 欠拟合:学习器学习能力过弱,对训练样本的一般性质尚未学好

欠拟合比较容易克服,可以在决策树学习中扩展分支、在神经网络中增加训练轮数等。

过拟合则难克服,过拟合是机器学习面临的关键障碍,各类学习算法都有一些针对过拟合的措施来缓解过拟合。

0x03 评估方法

为了对学习器的泛化误差进行评估,需要使用一个测试集来测试学习器对新样本的判别能力,然后以测试集上的测试误差作为泛化误差的近似。

测试集应该尽量与训练集互斥,即测试样本尽量不在训练集中出现、未在训练集中使用过。

下来介绍几种常用的评估方法:

留出法

留出法是直接将数据集 D 划分为两个互斥的几何,其中一个集合作为训练集 S,另一个作为测试集 T。

在训练集 S 中训练出模型后,用测试集 T 来评估其测试误差,作为对泛化误差的估计。

训练/测试集要尽可能的保证数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。具体做法是尽可能保留类别比例,最好使用分层采样的方法。

交叉验证法

交叉验证法先将数据集 D 划分为 k 个大小相似的互斥子集,每个子集尽可能的保证数据分布的一致性。

然后每次使用 k-1 个子集作为训练集,余下的一个子集作为测试集。

这样就可以得到 k 组训练/测试集,可以进行 k 次训练和测试,最终返回的是 k 个测试结果的均值。

交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值。

通常将交叉验证法称为“k 折交叉验证”。如 k 取 10,则称为 10 折交叉验证。

留一法

如果数据集 D 中包含 m 个样本,若令 k=m,则得到了交叉验证法的一个特例:留一法。

显然,留一法不受随机样本划分方式的影响,因为留一法只有唯一一种划分方式。

留一法的评估结果往往被认为比较准确。但是留一法也存在缺陷,当数据集较大时,训练 m 个模型的计算开销非常大。比如我们是上千万级的数据,那么就得训练上千万个模型,这是不现实的。

自助法

上述几种方法都存在一个问题,那就是由于保留了一部分样本用于测试,导致实际评估的模型所使用的训练集比 D 小,会引起一些误差,而自助法,可以解决这个问题。

自助法以自助采样法为基础,给定包含 m 个样本的数据集 D,对它进行采样产生数据集 D’:

每次随机从 D 中挑选一个样本,再将样本放回初始数据集中,使得该样本在下次采样时仍有可能被采到。这个过程重复执行 m 次后,我们就得到了包含 m 个样本的数据集 D’,这就是自助采样的结果。

D 中有一部分样本会在 D’中多次出现,而另一部分样本不出现。可以做一个简单的估计,样本在 m 次采样中始终不被采到的概率是

取极限得到

  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 643 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 640 关注
  • abitmean

    有点意思就行了

    30 关注
  • 自由行
    1 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 269 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    88 引用 • 1235 回帖 • 416 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    946 引用 • 1460 回帖 • 1 关注
  • 叶归
    5 引用 • 16 回帖 • 10 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 1 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 4 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    77 引用 • 389 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 232 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 168 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 175 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 430 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 83 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 544 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 17 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 1 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1057 回帖
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 1 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1278 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 651 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 46 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 759 关注