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

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. 在FFMPEG中使用libRTMP的经验

    FFMPEG在编译的时候可以选择支持RTMP的类库libRTMP.这样ffmpeg就可以支持rtmp://, rtmpt://, rtmpe://, rtmpte://,以及 rtmps://协议了. ...

  2. 实战项目开发细节:C语言分离一个16进制数取出相应的位1或0

    最近在公司开发一个关于钢琴的PCBA项目,项目大概是这样的,完成各种功能的测试,准备去工厂量产的时候可以通过软件快速甄别硬件是否短路,断路等问题. 其中,甄别好坏的方法是通过比如按键,或者其它的操作然 ...

  3. Java 去掉字符串中的换行符回车符等

    去掉一个字符串中的换行符.回车符等,将连续多个空格替换成一个空格 String string = "this just a test" Pattern p = Pattern.co ...

  4. window 8.1 + python 3.6 + chrome 59 + selenium 3.4 环境配置

    系统环境 window 8.1 python 3.6 (已经安装了pip) chrome 59.0.3071.115 步骤 安装selenium pip install selenium 下载chro ...

  5. 一个基础的for循环面试题

    下面的这段程序主要考察的就是for循环的基础,输出什么?????? [html] view plaincopyprint? public class test { /** * @param args ...

  6. oracle面试题目总结

    阿里巴巴公司DBA笔试题  http://searchdatabase.techtarget.com.cn/tips/2/2535002.shtml   注:以下题目,可根据自己情况挑选题目作答,不必 ...

  7. LOVO学习之思维导图和文档编辑器

    思维导图——是一种图示笔记方法,一种图示笔记工具,一个思考的利器.能将放射性思考具体化,帮助人们理解和记忆事物. 思维导图绘制规则:1,在纸的正中央用一个彩色图像或者符号开始画思维导图. 2,把所有主 ...

  8. oracle 游标简单示例

    1.游标的概念以及作用 游标(Cursor)可以使用户想操作数组一样对查询出来的结果集进行操作,可以形象的看做一个变动的光标,其实际行是一个指针,它在一段Oracle存放数据查询结果集或数据 操作集的 ...

  9. Java程序基础编程基础

    1.在屏幕上输出"你好" //Programmer name Helloword.javapublic class Helloword { public static void m ...

  10. 0513JS数组的定义、遍历、添加

    |数组|-定义方式|--1.new Array();|----空数组|------var attr = new Array();|------lenght:0|------_proto_: Array ...