我们将学习如何系统地提升机器学习算法,告诉你学习算法何时做得不好,并描述如何'调试'你的学习算法和提高其性能的“最佳实践”。要优化机器学习算法,需要先了解可以在哪里做最大的改进。 我们将讨论如何理解具有多个部分的机器学习系统的性能,以及如何处理偏斜数据。

Evaluating a Hypothesis

设想当你训练的模型对预测数据有很大偏差的时候,接下来你会选择怎么做?

这个需要花时间去实现,但是对你的帮助也会很大,使你不盲目的做一些决定来提升算法,而是直观地看出哪些是对提升算法是有效的。

我们将数据分为两个集合,Training Set(70%),Test set(30%)

算法评估过程如下:

1.从Training Set学习参数(通过最小化误差J(theta)实现);

2.计算测试误差J(test).

下面是线性回归和分类问题的误差计算方式:

Model Selection and Train/Validation/Test Sets

从多个假设中选择一个训练误差最小的,只能说明它对Training Set有很好的拟合效果,它也可能是Overfit,然后导致Prediction很差。

所以我们下面将数据集分为3个:

这里以之前的房价预测作为例子。

每种误差类型的计算方法如下:

模型选择方法:

1.使用Training Set 最小化 Jtrain(theta)学习得到参数theta;

2.使用训练得到的参数,在Cross Validation Set上计算误差,找到使Jcv(theta)最小的模型,作为训练的最终模型;

3.在训练出的模型上使用test Set计算泛化误差,评价算法好坏。

Diagnosing Bias vs. Variance

在这之前我们都已经讨论过关于underfit和overfit了。那么当你的模型结果不理想时,怎么判断到底是出现了哪种情况呢。

High Bias(underfit):训练误差Jtrain和交叉验证Jcv都很高,Jcv~Jtrain

High Variance(overfit):Jtain很小,Jcv很大且>>Jtrain.

Regularization and Bias/Variance

下面讲解如何选择regularization parameter避免underfit和overfit。

这里除了我们的objective function使用lambda参数外,其他的Jtrain、Jcv和Jtest都不使用lambda进行计算,计算公式如上面。

选择过程:

1.列出所有可能的lambda取值,老师建议每次增加2倍的取值。

2.建立假设模型,h(theta)。

3.遍历所有的lambda,通过minJ(theta)学习参数。

4.在cv集合使用训练的参数theta计算误差Jcv,选择使Jcv最小的theta;

5.用学习到的theta参数,在test set上测试泛化误差。

下面是Jcv和Jtrain关于lambda的函数图象。注意:我们只是在objective funtion J(theta)中使用了lambda,而非Jtrain和Jcv。

可以看出:随着lambda增大,Jtrain是单调增大的;而Jcv先是减小到一个拐点,然后增大。

而我们需要算法有一个小的Jcv,这里就有一个“just right”,也就是那个Jcv的最小值点,就是我们需要选择的lambda。

Learning Curves

以error和training set size作函数图象,作为learning cruvers。

下面是算法处于高偏差(underfit)的情况。

判断模型处于High Bias:

样本少:Jtrain低,Jcv高;

样本多:Jtrain、Jcv都高,且Jtrain ~Jcv

若算法处于High bias,增加更多的训练样本对模型提高不会有太大帮助。

下面是算法处于High variance(overfit)的情况

算法处于High variance:

样本少:Jtrain 低,Jcv高;

样本多:Jtrain升高且会一直升高,Jcv降低且一直降低,Jtrain < Jcv且大小明显。

若算法处于high variance,增加训练样本会有帮助。

Deciding What to Do Next Revisited

回顾一下本课开头提出的问题,如何提高你的算法?经过上面的讨论,我们可以得到以下结论:

关于神经网络的underfit和overfit及其解决。

以上所谈对建立一个好的机器学习算法至关重要,而且可以节约不少时间,少走弯路。

斯坦福机器学习视频笔记 Week6 关于机器学习的建议 Advice for Applying Machine Learning的更多相关文章

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

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

  2. Ng第十课:应用机器学习的建议(Advice for Applying Machine Learning)

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

  3. 10、应用机器学习的建议(Advice for Applying Machine Learning)

    10.1 决定下一步做什么 到目前为止,我们已经介绍了许多不同的学习算法,如果你一直跟着这些视频的进度学习,你会发现自己已经不知不觉地成为一个了解许多先进机器学习技术的专家了. 然而,在懂机器学习的人 ...

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

    当我们运行一个学习算法时,如果这个算法的表现不理想,那么有两种原因导致:要么偏差比较大.要么方差比较大.换句话说,要么是欠拟合.要么是过拟合.那么这两种情况,哪个和偏差有关.哪个和方差有关,或者是不是 ...

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

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

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

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

  7. 李宏毅老师机器学习课程笔记_ML Lecture 0-2: Why we need to learn machine learning?

    引言: 最近开始学习"机器学习",早就听说祖国宝岛的李宏毅老师的大名,一直没有时间看他的系列课程.今天听了一课,感觉非常棒,通俗易懂,而又能够抓住重点,中间还能加上一些很有趣的例子 ...

  8. 斯坦福大学公开课机器学习:advice for applying machine learning | model selection and training/validation/test sets(模型选择以及训练集、交叉验证集和测试集的概念)

    怎样选用正确的特征构造学习算法或者如何选择学习算法中的正则化参数lambda?这些问题我们称之为模型选择问题. 在对于这一问题的讨论中,我们不仅将数据分为:训练集和测试集,而是将数据分为三个数据组:也 ...

  9. 斯坦福大学公开课机器学习:advice for applying machine learning - deciding what to try next(设计机器学习系统时,怎样确定最适合、最正确的方法)

    假如我们在开发一个机器学习系统,想试着改进一个机器学习系统的性能,我们应该如何决定接下来应该选择哪条道路? 为了解释这一问题,以预测房价的学习例子.假如我们已经得到学习参数以后,要将我们的假设函数放到 ...

随机推荐

  1. C++中计算矩阵的行列式

    使用eigen库: 求行列式: #include <iostream> #include <Eigen/Dense> using namespace std; using na ...

  2. [转]Java中怎样把数组转换为ArrayList

    方法汇总: Element[] array = {new Element(1),new Element(2),new Element(3)}; ArrayList<Element> arr ...

  3. 更新mac系统和更新到Xcode7.3版本出现的: cannot create __weak reference in file using manual reference counting

    之前的编程没有遇到过,应该是苹果官方那边又做了新规吧. 不过不要紧,只要根据这个就能解决报错问题.  Set Build Settings -> Apple LLVM 7.1 - Languag ...

  4. python3基础知识学习记录

    学习地址:http://www.runoob.com/python3/python3-tutorial.html ------------------------------ 为什么要学python: ...

  5. awk 特征相同的行合并

    [root@linux-node1 ~]# cat test.txt hisk01 hisk02 hisk03 hisk04 hisk05 hisk06 hisk07 hisk08 [root@lin ...

  6. SAP系统自带的function module

    SAP有很多系统自带的FM,直接在Pattern中就可以调出.---test 1.     KD_GET_FILENAME_ON_F4 ---------------------用以在windows ...

  7. EasyNVR摄像机无插件直播进行摄像机云台控制的接入及调用详解

    EasyNVR云台接入及控制详解 摄像机云台控制在摄像机当中很常见摄像机能将当前状态下云台的水平角度.倾斜角度和摄像机镜头焦距等位置参数存储到设备中,需要时可以迅速调用这些参数并将云台和摄像头调整至该 ...

  8. Web开发之容器

    Web开发之容器 主题 Servlet容器.Web容器.应用服务器 参考资料   Servlet容器.Web容器.应用服务器         Servlet容器的主要任务是管理Servlet的生命周期 ...

  9. 学习 Tornado

    异步编程 预习 lambda Lambda functions can be used wherever function objects are required. They are syntact ...

  10. Token bucket

    w https://en.wikipedia.org/wiki/Token_bucket