当我们运行一个学习算法时,如果这个算法的表现不理想,那么有两种原因导致:要么偏差比较大、要么方差比较大。换句话说,要么是欠拟合、要么是过拟合。那么这两种情况,哪个和偏差有关、哪个和方差有关,或者是不是和两个都有关,搞清楚这点很重要。能判断出现的情况是这两种中的哪一种,是一个很有效的指示器,指引着可以改进算法的最有效的方法和途径。

下面深入地探讨一下有关偏差和方差的问题,并且能弄清楚怎样评价一个学习算法、能够判断一个算法是偏差还是方差有问题。因为这个问题对于弄清如何改进学习算法的效果非常重要。

如下图,用两个很简单的假设来拟合数据,比如说用一条直线,那么不足以拟合这组数据(欠拟合,左图),而如果你用两个很复杂的假设来拟合时,那么对训练集来说则会拟合得很好,但又过于完美(过拟合,右图)。而像这样的中等复杂度的假设(中间的图),比如某种二次多项式的假设,次数既不高也不低,这种假设对数据拟合得刚刚好。此时对应的的泛化误差,也是三种情况中最小的。

前面已经掌握了训练集、验证集和测试集的概念(斯坦福大学公开课机器学习:advice for applying machine learning | model selection and training/validation/test sets(模型选择以及训练集、交叉验证集和测试集的概念)),接下来就能更好地理解偏差和方差的问题。具体来说沿用之前所使用的训练集误差和验证集、误差的定义,也就是平方误差。即对训练集数据进行预测,或对验证集数据进行预测,所产生的平均平方误差。下面我们来画出如下这个示意图,横坐标上表示的是多项式的次数(中间图),因此横坐标越往右的位置,表示多项式的次数越大。那么我们来画这幅图对应的情况,d可能等于1的情况,是用很简单的函数来进行拟合。而在右边的这个图中,水平横坐标表示有更多更大的d值.表示更高次数的多项式。因此这些位置对应着使用更复杂的函数,来拟合训练集时所需要的d值。先画训练集误差,随着我们增大多项式的次数,我们将对训练集拟合得越来越好。所以如果d等于1时,对应着一个比较大的训练误差。而如果我们的多项式次数很高时,我们的训练误差就会很小,甚至可能等于0,因为可能非常拟合训练集。所以,当我们增大多项式次数时,不难发现训练误差明显下降(紫红色曲线)。这里写上J下标3来表示训练集误差。接下来再看交叉验证误差,如果我们观察测试集误差的话,我们会得到一个和交叉验证误差非常接近的结果。所以,我们知道如果d等于1的话,意味着用一个很简单的函数来拟合数据。也就是说,我们会得到一个较大的交叉验证误差(红色曲线标注1)。而如果我们用一个中等大小的多项式次数来拟合时,在前一张幻灯片中我们用的d等于2,那么我们会得到一个更小的交叉验证误差。因为我们找了一个能够更好拟合数据的次数。同样地,反过来,如果次数d太大,比如说d的值取为4,那么我们又过拟合了,我们又会得到一个较大的交叉验证误差。因此,如果你平稳地过渡这几个点,你可以绘制出一条平滑的曲线,就像这样,我用Jcv(θ)来表示(红色曲线)。同样地,如果你画出Jtest(θ),你也将得到一条类似的曲线,这样一幅图也同时能帮助我们更好地理解偏差和方差的概念。

具体来说,假设我们得出了一个学习算法,但这个算法并没有表现地如预期那么好。即交叉验证误差或者测试集误差都很大。那么我们应该如何判断此时的学习算法是高偏差的问题还是高方差的问题呢?交叉验证误差比较大的情况,对应着曲线中的左右两端(下图Jcv(θ)对应的曲线)。左端对应的就是高偏差的问题,也就是我们使用了一个过于小的多项式次数,比如d等于1。但实际上我们需要一个较高的多项式次数来拟合数据。相反地,右端对应的是高方差问题。也就是说,多项式次数d对于我们的数据来讲太大了。具体地说,第一、高偏差的情况,对应欠拟合的情况:交叉验证误差和训练误差都会很大。因此,如果你的算法有偏差问题的话,那么训练集误差将会比较大。同时你可能会发现交叉验证集误差也很大。两个误差可能很接近,或者可能验证误差稍大一点,所以如果你看到这样的组合情况,那就表示你的算法正处于高偏差的问题。第二、如果算法处于高方差的问题,那么Jtrain(训练误差)会很小。也就意味着,训练集数据拟合得非常好。而交叉验证集误差或者说交叉验证集对应的代价函数的值,将会远远大于训练集误差(双大于符号是一个数学符号,表示远远大于,用两个大于符号表示)。因此如果存在这种组合的情况,预示着学习算法可能正处于高方差和过拟合的情况。同时,区分这两种不同情形的关键依据是,如果算法处于高偏差的情况,那么你的训练集误差会很大。因为你的假设不能很好地拟合训练集数据。而当你处于高方差的问题时,你的训练误差通常都会很小,并且远远小于交叉验证误差。

斯坦福大学公开课机器学习:advice for applying machine learning | diagnosing bias vs. variance(机器学习:诊断偏差和方差问题)的更多相关文章

  1. 斯坦福大学公开课机器学习: advice for applying machine learning | regularization and bais/variance(机器学习中方差和偏差如何相互影响、以及和算法的正则化之间的相互关系)

    算法正则化可以有效地防止过拟合, 但正则化跟算法的偏差和方差又有什么关系呢?下面主要讨论一下方差和偏差两者之间是如何相互影响的.以及和算法的正则化之间的相互关系 假如我们要对高阶的多项式进行拟合,为了 ...

  2. 第19月第8天 斯坦福大学公开课机器学习 (吴恩达 Andrew Ng)

    1.斯坦福大学公开课机器学习 (吴恩达 Andrew Ng) http://open.163.com/special/opencourse/machinelearning.html 笔记 http:/ ...

  3. 斯坦福大学公开课:iOS 7应用开发 笔记

    2015-07-06 第一讲   课务.iOS概述 -------------------------------------------------- 开始学习斯坦福大学公开课:iOS 7应用开发留 ...

  4. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 10—Advice for applying machine learning 机器学习应用建议

    Lecture 10—Advice for applying machine learning 10.1 如何调试一个机器学习算法? 有多种方案: 1.获得更多训练数据:2.尝试更少特征:3.尝试更多 ...

  5. Coursera 机器学习 第6章(上) Advice for Applying Machine Learning 学习笔记

    这章的内容对于设计分析假设性能有很大的帮助,如果运用的好,将会节省实验者大量时间. Machine Learning System Design6.1 Evaluating a Learning Al ...

  6. Machine Learning - 第6周(Advice for Applying Machine Learning、Machine Learning System Design)

    In Week 6, you will be learning about systematically improving your learning algorithm. The videos f ...

  7. (原创)Stanford Machine Learning (by Andrew NG) --- (week 6) Advice for Applying Machine Learning & Machine Learning System Design

    (1) Advice for applying machine learning Deciding what to try next 现在我们已学习了线性回归.逻辑回归.神经网络等机器学习算法,接下来 ...

  8. Advice for applying Machine Learning

    https://jmetzen.github.io/2015-01-29/ml_advice.html Advice for applying Machine Learning This post i ...

  9. 斯坦福第十课:应用机器学习的建议(Advice for Applying Machine Learning)

    10.1  决定下一步做什么 10.2  评估一个假设 10.3  模型选择和交叉验证集 10.4  诊断偏差和方差 10.5  归一化和偏差/方差 10.6  学习曲线 10.7  决定下一步做什么 ...

随机推荐

  1. Python魔法方法(magic method)细解几个常用魔法方法(下)

    接上文,再介绍最后几个常用的魔法方法. 关于__dict__: 先上个例子: class Test(object): fly = True def __init__(self, age): self. ...

  2. WPF通过DynamicResource实现给界面动态更换皮肤

    在我们的程序中有时候需要去实现动态更换皮肤的效果,从而完成一些个性化的设置,那么我们究竟怎样去实现动态换皮肤的效果呢?那么我们经常用到的就是设置不同的Style,并且在主程序的xaml文件中通过Dyn ...

  3. Data Structures & js &ES 6 & ES next

    Data Structures & js &ES 6 & ES next Algorithm Singly-Linked List & Doubly-Linked Li ...

  4. 莫烦theano学习自修第十天【保存神经网络及加载神经网络】

    1. 为何保存神经网络 保存神经网络指的是保存神经网络的权重W及偏置b,权重W,和偏置b本身是一个列表,将这两个列表的值写到列表或者字典的数据结构中,使用pickle的数据结构将列表或者字典写入到文件 ...

  5. 莫烦theano学习自修第一天【常量和矩阵的运算】

    1. 代码实现如下: #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ # 导入numpy模块,因为numpy是常用的计算模块 import numpy as ...

  6. .NET提供了三种后台输出js的方式:

    .NET提供了三种后台输出js的方式: 首先创建 js文件testjs.js {    Page.ClientScript.RegisterClientScriptInclude("keys ...

  7. Deploy .NET Core with Docker

    Creating a .NET Core project If you already have an existing .NET Core project you are more than wel ...

  8. 进程间通信IPC与Binder机制原理

    1, Intent隐式意图携带数据 2, AIDL(Binder) 3, 广播BroadCast 4, 内容提供者ContentProvider 5,Messager(内部通过binder实现) 6, ...

  9. Vue 计算

    目标:字段c=字段a+字段b 方法1 直接使用Mustache(胡子表达式) <body> <div id="example" > <input v- ...

  10. [洛谷P1730] 最小密度路径

    类型:Floyd 传送门:>Here< 题意:定义一条路径密度 = 该路径长度 / 边数.给出一张$DAG$,现有$Q$次询问,每次给出$X,Y$,问$X,Y$的最小密度路径($N \le ...