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

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. Demonstration of DB Query Analyzer 6.03 Installation and Running on Microsoft Windows 8

    Demonstration of DB Query Analyzer 6.03 Installation and Running on Microsoft Windows 8 Ma Genfeng ( ...

  2. SpriteBuilder中物理对象能否被缩放

    我前面早些时候提到物理形状不能被缩放. 现在我却说可以缩放它们,这是为啥呢? 好吧,拥有物理物体节点的缩放属性真心不能被动画化或改变在运行的时候; 但是你可以在SpriteBuilder中设置启用物理 ...

  3. Oracle Global Finanicals Technical Reference(一)

    Skip Headers Oracle Global Finanicals Oracle Global Financials Technical Reference Manual Release 11 ...

  4. React Native Android开发环境配置

    近些年,Web前端甚是火爆,火爆程度堪比我毕业时的移动端开发一般.随着JavaScript的火爆,移动端也不安分了起来,ReactNative就异军突起了,几乎要做到"一次学习,四处开发&q ...

  5. linux swing 乱码

    转载 Linux下关于解决JavaSwing中文乱码的情况 redhed 貌似没出现乱码 本身就jdk就支持中文 红旗linux  suse等都不支持,需要自己手工配置,解决办法: 第一种方法: 1. ...

  6. java的老说三大框架

    一直不明白java的老说三大框架,怎么就一个SSH,今天终于有了一点点的了解. 三大框架就是Spring框架,Struts框架,Hibernate框架. Spring提供了管理业务对象的一致方法并且鼓 ...

  7. 安装VirtualBox后 不能选择64bit的系统

    之前在台式机上安装VirtualBox,一切OK,能够安装64位的任何版本iso包今天在hp笔记本上安装,安装VirtualBox完毕后,只能选择32位的iso版本. 而我目前只有一个linux64b ...

  8. Space Golf~物理题目

    Description You surely have never heard of this new planet surface exploration scheme, as it is bein ...

  9. svn Server sent unexpected return value (403 Forbidden) in response to CHECKOUT

    今天,提交資料到公司svn服務器,但是一直提示 Server sent unexpected return value (403 Forbidden) in response to CHECKOUT ...

  10. 在网页中使用particlesjs实现背景的动态粒子特效

    先上一张效果图: 这种动态的背景特效,制作起来其实非常简单. 使用了particles.js particles.js可以从github网站下载到最新的源码,网址是 https://github.co ...