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

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

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

前面已经掌握了训练集、验证集和测试集的概念(斯坦福大学公开课机器学习: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. ERROR org.hibernate.internal.SessionImpl - HHH000346: Error during managed flush [object references an unsaved transient instance - save the transient instance before flushing: cn.itcast.domain.Custom

    本片博文整理关于Hibernate中级联策略cascade和它导致的异常: Exception in thread "main" org.hibernate.TransientOb ...

  2. 使用proxychains 代理终端

    最近在国外的vps上搭建了一个ss服务器,在浏览器里面设置socks5代理上网很方便, 但是终端里面却只支持http方式的代理配置,网上有socks转http代理的方式,但是最近发现一个更为简单的方式 ...

  3. Oracle中保留两位小数

    在最近的项目开发中,有个业务需求是界面显示的数字需要保留两位小数,目前我想到的解决方法有两种: (1)在写SQL的时候,直接保留两位小数 (2)在java代码里面将查询出来的数进行格式化处理,保留两位 ...

  4. jedis单机版应用

    1.pom文件添加依赖: 2.创建配置文件 创建单机版redisClient 代码: package com.skymall.rest.dao.imp; import org.springframew ...

  5. javascript帧动画

    前面的话 帧动画就是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成的动画.由于是一帧一帧的画,所以帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容. ...

  6. UVA 11988 Beiju Text

    https://vjudge.net/problem/UVA-11988 题目 你有一个破损的键盘.键盘上所有的键都可以正常工作,但有时候Home键或者End键会自动按下.你并不知道键盘存在这一问题, ...

  7. .net core 2.0 数据访问-迁移

    将用于进行迁移的 Entity Framework Core NuGet包 添加到`.csproj`文件 <ItemGroup> <DotNetCliToolReference In ...

  8. Python字符串和列表的内置方法

    一.字符串内置方法 1.strip()  删除开头和结尾的字符串 s.strip(rm) 删除s字符串中开头,结尾处,位于rm删除序列的字符串 s.lstrip(rm) 删除s字符串中开头位于rm删除 ...

  9. property装饰器

    # 需要了解的property的用法 class People: def __init__(self,name): self.__name=name @property def name(self): ...

  10. Get Luffy Out * HDU - 1816(2 - sat 妈的 智障)

    题意: 英语限制了我的行动力....就是两个钥匙不能同时用,两个锁至少开一个 建个图 二分就好了...emm....dfs  开头low 写成sccno  然后生活失去希望... #include & ...