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

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. 色彩转换——RGB & HSV

    RGB to HSV The R,G,B values are divided by 255 to change the range from 0..255 to 0..1: R' = R/255 G ...

  2. ubuntu下搭建gtk+编程环境

    首先gtk+项目主页为: http://www.gtk.org/ gtk+现在有2和3两种版本,使用 sudo apt-get install gnome-core-devel 可以一次性安装2个版本 ...

  3. 【Qt编程】基于Qt的词典开发系列<五>--无边框窗口的拖动

    在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口 ...

  4. android.os.NetworkOnMainThreadException异常如何解决

    android.os.NetworkOnMainThreadException 08-08 17:53:30.635 I/ArticleTable(22461): 添加成功 58 08-08 17:5 ...

  5. SharePoint 解决方案手动打包简单介绍

    介绍:在使用SharePoint中,我们经常需要做的就是打包解决方案,我们来介绍下SharePoint解决方案的手动部署,我自己觉得,解决方案是SharePoint中非常好的一个功能,部署和使用起来相 ...

  6. LeetCode(24)-Balanced Binary Tree

    题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...

  7. 关于linux音频指南

    音频操作是linux系统下必不可少,如您需要设计一个播放器,那么音频就是其中的一部分. 方法/步骤 1 音调: 振动的频率;     音量: 振动的幅度;     音色: 不同介质有不同声音;     ...

  8. Log4j运用于代码中

    在JAVA代码中,我们要打印输出语句的时候,我们经常会使用System.out.print(),但是在项目开发完后,这些代码就会影响项目的运行效率,所以Log4j就派上用场了.话不多说,直接上代码. ...

  9. The 2nd tip of DB Query Analyzer

    The 2nd tip of DB Query Analyzer                               Ma Genfeng   (Guangdong Unitoll Servi ...

  10. Ajax+jquery+jaso传输数据

    所谓的Ajax.这里我们讲二种方法  方法一:(微软有自带Ajax框架)  在Asp.net里微软有自己的Ajax框架.就是在页面后台.cs文件里引入 using System.Web.Service ...