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

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

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

    76 引用 • 37 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • CodeMirror
    1 引用 • 2 回帖 • 115 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 7 关注
  • 机器学习

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

    76 引用 • 37 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 43 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 642 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    311 引用 • 1666 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    284 引用 • 4481 回帖 • 656 关注
  • OkHttp

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

    16 引用 • 6 回帖 • 54 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 1 关注
  • Wide

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

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

    30 引用 • 218 回帖 • 605 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 3 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1425 引用 • 10043 回帖 • 473 关注
  • 招聘

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

    189 引用 • 1056 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 44 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 43 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 22 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 681 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    273 引用 • 679 回帖 • 1 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    333 引用 • 323 回帖 • 71 关注
  • Node.js

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

    138 引用 • 268 回帖 • 201 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • 小薇

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

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

    34 引用 • 467 回帖 • 692 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 68 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    172 引用 • 990 回帖
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 452 关注