这一章应该算是比价了理论的一章,我有些概率论基础,不过起初有些地方还是没看多大懂。其中有些公式的定义和模型误差的推导应该还是很眼熟的,就是之前在概率论课上提过的,不过有些模糊了,当时课上学得比较浅。

Day2 第二章 模型评估与选择

2.1 经验误差与过拟合

  通常我们把分类错误的样本数占样本总数的比例称为“错误率(error rate)”,即错误率E=a/m,m个样本中a个错误,1-a/m称为“精度(accuracy)”,我们把学习器的实际输出与样本的真实输出之间的差异称为“误差(error)”,学习期在训练机上的误差称为“训练误差(training error)”或“经验误差(empirical error)”,在新样本上的误差叫做“泛化误差(generation error)”,显然,我们做机器学习,就是希望得到泛化误差小的学习器。

  一个好的学习器,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,注意,这里说的“普遍规律”。这里就涉及到学习器的两个概念:“过拟合(overfitting)”和“欠拟合(underfitting)”。过拟合:就是学习器把本学得太好了,把训练样本自身的一些特点当做了潜在样本都会有的一般性质了,欠拟合:顾名思义,就是对训练样本的一般性质还没学好。导致过拟合的因数很多,最常见的是由于学习能力过于强大,把样本不太一般的特性都学会了,而欠拟合是由于学习能力低下造成的。欠拟合容易克服,过拟合不好克服(要构造性地证明 “P=NP”,只要相信“P≠NP”,过拟合就不可避免),比较麻烦。

2.2 评估方法

  通常,我们可通过实验测试来对学习器的泛化误差进行评估进而做出选择。

  为此,我们需要使用一个“测试集(testing set)”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差(testing error)”作为泛化误差的近似。这里说到的测试集,来自于数据集,应该尽可能与训练集排斥,即测试样本尽量不在训练集中出现,未在训练集中使用过,这很好理解:学完一门课,老师出了10道习题用作课后练习,如果老师想要考察同学们对着门课的学习情况,如果用这10道习题用作考题,显然得不到正确的考察结果。但是,我们如果只有一个包含m个样本的数据集D={(x1, y1),(x2, y2),…,(xm, ym)},既要训练,又要测试,我们就要对D做适当的处理,从中产生训练集S和测试集T,有以下常见做法:

  2.2.1 留出法

“留出法(hold-out)”直接将数据集D划分为两个互斥的集合,训练集S和测试集T,即D=S∪T,S∩T=∅。我们通常将数据集的大约2/3~4/5的样本用作训练,剩余样本用作测试。

  2.2.2 交叉验证法

“交叉验证法(cross validation)”先将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪…∪Dk, Di∪Dj=∅(i≠j),且每个子集Di都尽可能保持原数据分布的一致性。然后,每次用k-1个子集的并集作为训练集,余下的一个子集做测试集,这样就可以获得k组训练/测试集,从而进行k次训练和测试,最终返回的是k个测试结果的平均值,因此,我们通常把交叉验证法称为“k折交叉验证法(k-fold cross validation)”。其中的一个特例是k=m:留一法(Leave-One-Out,简称LOO)。

  2.2.3 自助法

我们希望评估的是用D训练出的模型,但留出法和交叉验证法中,由于保留了一部分样本用作测试,因此实际评估的模型使用的训练集比D小,这必然会引入一些因训练集规模不同而导致的估计偏差。“自助法(bootstrapping)”是一个比较好的解决方案,它直接以自助采样法(bootstrap sampling)为基础。用自助法通过一些列处理,达到的效果是:实际评估的模型和期望评估的模型都使用m个训练样本,而仍有数据总量约1/3的、没在训练集中出现的样本用于测试,这样的测试结果,也叫“包外估计(out-of-bag estimate)”。自助法在数据集较小。难以有效划分训练/训练集时很有用。

  2.2.4 调参和最终模型

大多数的学习算法都有些参数(parameter)需要设定,参数配置不同,学得的模型的性能有显著差别。

2.3 性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量泛化能力的评价标准,这就是性能度量(performance measure)

  2.3.1 错误率和精度

  2.3.2 查准率、查全率和F1

  2.3.3 ROC和AUC

ROC全称“受试者工作特征(Receiver Operating Characteristic)”曲线,源自于“二战”中用于敌机检测的雷达信号分析技术,二十世纪六七十年代开始别用于一些心理学、医学检测应用中,此后别引入机器学习领域。AUC(Area Under ROC Curve),AUC可通过对ROC曲线下各部分的面积求和而得。

  2.3.4 代价敏感错误率和代价曲线

2.4 比较检验(对这一块知识没看太懂后续多看几遍)

有了实验评估方法和性能度量,可以使用某种实验评估方法测得学习器的某个性能度量,然后对这些结果进行比较,但问题是如何做这个“比较”。

统计假设检验“hypothesis test”为上面说的学习器性能比较提供了重要的依据。

  2.4.1 假设检验

  概率论和统计学上面的概念

  2.4.2 交叉验证t检验

  2.4.3 McNemar检验

  2.4.4 Friedman 检验和Nemenyi后续检验

2.5 偏差与方差

  自助采样法在机器学习中有重要用途。ROC曲线在二十世纪八十年代后期被引入机器学习,AUC则是从九十年代中期在机器学习领域广为使用。

  (第二章笔记到此,继续学习后续章节)

Day2 《机器学习》第二章学习笔记的更多相关文章

  1. AS开发实战第二章学习笔记——其他

    第二章学习笔记(1.19-1.22)像素Android支持的像素单位主要有px(像素).in(英寸).mm(毫米).pt(磅,1/72英寸).dp(与设备无关的显示单位).dip(就是dp).sp(用 ...

  2. #Spring实战第二章学习笔记————装配Bean

    Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...

  3. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

  4. 《Linux内核设计与实现》课本第一章&第二章学习笔记

    <Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...

  5. Linux第一章第二章学习笔记

    第一章 Linux内核简介 1.1 Unix的历史 它是现存操作系统中最强大最优秀的系统. 设计简洁,在发布时提供原代码. 所有东西都被当做文件对待. Unix的内核和其他相关软件是用C语言编写而成的 ...

  6. Machine Learning In Action 第二章学习笔记: kNN算法

    本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...

  7. Thinking in Java 第二章学习笔记

    Java虽基于C++,但相比之下,Java是一种更加纯粹的面向对象程序设计语言. 在Java的世界里,几乎一切都是对象,而Java中的全部工作则是定义类,产生那些类的对象,以及发送消息给这些对象. 尽 ...

  8. Scala第二章学习笔记

    最基本的练习~: 使用伴生对象: object holder{ class Foo{ private var x = 5} object Foo{def im_in_yr_foo(f: Foo) = ...

  9. 《Python自然语言处理》第二章 学习笔记

    import nltk from nltk.book import * nltk.corpus.gutenberg.fileids() emma = nltk.corpus.gutenberg.wor ...

随机推荐

  1. Linux进程通信学习总结

    http://blog.csdn.net/xiaoweibeibei/article/details/6552498 SYSV子系统的相关概念   引用标识符:引用标识符是一个整数,表示每一个SYSV ...

  2. Spring的事务 之 9.1 数据库事务概述 ——跟我学spring3

    9.1  数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...

  3. Linux的pwd命令详解

    在Linux层次结构中,用户可以在被授权的任意目录下利用mkdir命令创建新目录,也可以利用cd命令从一个目录转换到另一个目录.然而,没有提示符来告知用户目前处于哪一个目录中.想要知道当前所处的目录, ...

  4. 获取redis主从复制链SHELL脚本

    获取redis主从复制链SHELL脚本 vi redisnode.sh #!/bin/sh master_host=$ master_port=$ auth=$ #判断输入密码是否为空,为空则转化为' ...

  5. Web安全测试工具小集

    从此文开始搬家CSDN的博客 本文内容全部节选自<Ajax Security>第14章内容推荐工具: 模糊黑盒测试工具(Fuzzer): Popular free fuzzers incl ...

  6. 原生Eclipse下Java服务器调试的一个问题

    当你对Server的配置修改以后,最好到 workspacedir\.metadata\.plugins\org.eclipse.wst.server.core\tmp0目录下把缓存文件给删除了,否则 ...

  7. 子RelativeLayout与layout_alignParentBottom属性会撑大视图

    如title所示,在一个子RelativeLayout中的某个元素如果设置了layout_alignParentBottom属性会导致这个RelativeLaytou的height wrap_cont ...

  8. R贡献文件中文

    贡献文件 注意: 贡献文件的CRAN区域被冻结,不再被主动维护. 英文 --- 其他语言 手册,教程等由R用户提供.R核心团队对内容不承担任何责任,但我们非常感谢您的努力,并鼓励大家为此列表做出贡献! ...

  9. python数据存储技巧

    1.文本存储 比如我们现在有10篇文章,每篇文章由三部分组成,题目,作者,内容(title,author,content),然后要求这三个部分明确展示出来,并且每篇文章之间用=====分割. 大致思路 ...

  10. VueJs(11)---vue-router(进阶2)

    vue-router(进阶2) 上篇文章讲了第一篇vue-router相关文章,文章地址:VueJs(10)---vue-router(进阶1) 一.命名路由 有时候,通过一个名称来标识一个路由显得更 ...