Advice for applying machine learning

本周主要学习如何提升算法效率,以及如何判断学习算法在什么时候表现的很糟糕和如何debug我们的学习算法。为了让学习算法表现更好,我们还会学习如何解决处理偏态数据(skewed data)。

以下内容部分参考我爱公开课-Advice for applying machine learning

一、内容概要

  • Evaluating a learning algorithm

    • Deciding what to try next(决定接下来该试着做什么)
    • Evaluating a Hypothesis (评估假设)
    • Model Selection and Train/Validation/Test sets (模型选择和训练/验证/测试集划分)
  • Bias vs. Variance
    • Diagnosing(诊断) Bias vs. Variance
    • Regularization and Bias/Variance
    • Learning Curves(学习曲线)
    • Deciding what to do next Revisited
  • Buiding a Spam Classifier
    • Priorizing what to work on
    • Error Analysis
  • Handling Skewed Data(处理偏斜数据)
    • Error Metrics for Skewed Classes(不对称分类的错误评估)
    • Trading Off Precision and Recall(精度与召回率的权衡)
  • Using Large Data Sets
    • Data For Machine Learning

二、重点&难点

1. Evaluating a Learning Algorithm

1) Deciding what to try next

一般来说我们训练学习算法遇到瓶颈的时候一般会从下面几种方法中选择一种或几种改进方法,但是随意选择一个可能会浪费我们的时间,所以接下来将会介绍Machine Learning Diagnostic来帮助我们选择更好的改进措施。

2)Evaluating a Hypothesis

这个其实就是将原来的训练数据集认为的再次分为Training set (70%)和Testing Set (30%),先对Training set 进行训练得到权重,然后将权重带入Testing Set ,最后算出误差testError,从而来判断学习算法的准确度。

testError的计算方法依计算类型不同而不同:

3)Model Selection and Train/Validation/Test Sets

上面提到了检查testError来判断假设的准确度,但是并不是误差越小,假设就越准确。

所以进一步优化的方法是将原来的数据划分为

  • Training Set(占60%左右)
  • Cross validation Set(20%)
  • Testing Set(20%)

下面开始进行模型选择,我们事先假设右下图10个多项式(d表示多项式的最高项次幂数)。

    1. 以Training Set为数据计算出10个不同的\(h_θ(x)\)的θ参数
    1. 将上一步中求出的θ参数分别代入验证数据集,并找出误差最小的一项,假设是\(θ^{(4)}\)
    1. 最后将\(θ^{(4)}\)带入测试集,评估最后的整体误差

2. Bias vs. Variance

1) Diagnosing(诊断) Bias vs. Variance

首先要能区分bias和variance的区别,祭上神图:

上图很好的诠释了二者的区别,更具体的可参见机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?

高偏差(high bias):\(J_{train}(θ)\)和\(J_{CV}(θ)\)都很大,并且二者的值接近

高方差(high variance):\(J_{train}(θ)\)小, \(J_{CV}(θ)\)远大于\(J_{train}(θ)\)

示意图如下:

2) Regularization and Bias/Variance

对于过拟合问题,正则化是个非常有效的解决方案,下面是一个之前提到过的正则化线性回归的例子:

\[h_θ(x) = θ_0 + θ_1x + θ_2x^2 +…… +θ_nx^n\]

\[
J(θ) = \frac{1}{2m}\sum_{i=1}^{m}(h_θ(x^{(i)})-y^{(i)})^2+\frac{λ}{2m}\sum_{j=1}^{m}θ_j^2\]

但是如何选择λ的值呢?this is a question!方法和上面的模式选择类似(见下图)



然后可以画出如下的关于λ的偏差、方差图



总结一下步骤就是:

  • 1.创建一组λ的值,如λ∈{0,0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24});
  • 2.创建一组不同degrees的\(h_θ(x)\),即x的最高次幂不同
  • 3.for λs in λ:

         for hs in h:

             学习得到一组θ
  • 4.计算\(J_{CV}(θ)\)
  • 5.选取验证集误差最小的一组参数
  • 6.将上面求得的最佳θ和λ代入测试集求出\(J_{test}(θ)\)

3) Learning Curves

  • 高偏差欠拟合问题的学习曲线:



我们发现,如果一个学习算法是高偏差的,那么它的训练误差和验证集误差在一定的训练样本数目之后都很高,而且不会随着样本数目的增大而改变,所以对于高偏差欠拟合的问题,增加训练样本数目不是一个好的解决办法

  • 高方差过拟合问题的学习曲线:



我们发现,如果一个学习算法是高方差的,那么它的训练误差和验证集误差在一定的训练样本数目之后虽然有差异,但是会随着样本数目的增大而减小她们之间的gap,所以对于高方差过拟合的问题,增加训练样本数目是解决方法之一。

4) Deciding what to do next Revisited

好了,说完了这么多与偏差/方差有关的问题,我们再次回到本章的开头的问题,

假设你实现了一个正则化的线性回归算法来预测房价,然而当你用它来测试一批新的房屋数据时,发现预测出来的数据是很不准确的,那么,下一步你该干啥?以下这些选项,分别针对的是高方差或高偏差的问题,你可以尝试用上述小节的一些方法来诊断你的学习算法,不过对于下述选项,需要你考虑一下是针对高偏差还是方差的问题,可以先思考一分钟再看答案:

  • 获取更多的训练样本

  • 尝试使用更少的特征的集合

  • 尝试获得其他特征

  • 尝试添加多项组合特征

  • 尝试减小 λ

  • 尝试增加 λ

答案:

  • 获取更多的训练样本 - 解决高方差

  • 尝试使用更少的特征的集合 - 解决高方差

  • 尝试获得其他特征 - 解决高偏差

  • 尝试添加多项组合特征 - 解决高偏差

  • 尝试减小 λ - 解决高偏差

  • 尝试增加 λ -解决高方差

3. Buiding a Spam Classifier

略,详情参考Coursera公开课笔记: 斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)”

4.Handling Skewed Data

1) Error Metrics for Skewed Classes

什么是不对称性分类(Skewed Classes)?

以癌症预测或者分类为例,我们训练了一个逻辑回归模型\(h_θ(x)\). 如果是癌症,y = 1, 其他则 y = 0。

我们将训练得到的模型运用到测试集上发现这个模型的错误率仅为1%(99%都分正确了),看起来貌似是一个非常好的结果?

但假如仅有0.5%的病人得了癌症。这个时候如果我们不用任何学习算法,对于测试集中的所有人都预测y = 0,即没有癌症,那么这个预测方法的错误率仅为0.5%,比我们废好大力训练的逻辑回归模型的还要好。这就是一个不对称分类的例子,对于这样的例子,仅仅考虑错误率是有风险的。

现在我们就来考虑一种标准的衡量方法:Precision/Recall(精确度和召回率)

首先对正例和负例做如下的定义:



True Positive (真正例, TP)被模型预测为正的正样本;可以称作判断为真的正确率

True Negative(真负例 , TN)被模型预测为负的负样本 ;可以称作判断为假的正确率

False Positive (假正例, FP)被模型预测为正的负样本;可以称作误报率

False Negative(假负例 , FN)被模型预测为负的正样本;可以称作漏报率

True/False: 指的是我们的算法预测分类的正负性

Postive/Negative: 指数据真实分类的正负性

计算公式如下:

例题:



计算可得

\[Precision = \frac{80}{80+20} = 0.8\]

\[Recall = \frac{80}{80+20} = 0.5\]

Precision:预测中实际得癌症的病人数量(真正例)除以我们预测的得癌症的病人数量

Recall-预测中实际得癌症的病人数量(真正例)除以实际得癌症的病人数量

2) Trading Off Precision and Recall(精度与召回率的权衡)

有了PrecisionRecall这两个指标可以帮助我们很直观的看到我们的模型的效果如何,但是当两个指标一大一小时我们该如何评判呢?例如

  • Precision1 = 0.85, Recall1 = 0.4
  • Precision2 = 0.36, Recall2 = 0.90

    这个时候再怎么评判呢?

首先我们假设已经训练得到了逻辑回归模型\(h_θ(x)\),,一种通常的判断正负类的方法是设定一个阈值,一般为0.5,即

  • \(h_θ(x)≥0.5 ,则y=1\)
  • \(h_θ(x)<0.5 ,则y=0\)

    很显然我们知道阈值的大小的设定可以调节Precision和Recall,例如
  • 当我们将阈值设为0.9,那么会导致高精度,低召回率(Higher precision, lower recall)
  • 当我们将阈值设为0.3,那么会导致高召回率,低精确度(Higher recall, lower precision)

这些问题,可以归结到一张Precision Recall曲线,简称PR-Curve:

你可能会想到用 (Precision+Recall)/2(即二者的均值)来作为评价的指标,下面我们来举个例子看看这样行不行

算法 Precision Recall (Precision+Recall)/2
算法1 0.5 0.4 0.45
算法2 0.7 0.1 0.4
算法3 0.02 1.0 0.51

按照上面的标准,算法3是最好的,但的确如此吗?直觉看上去算法一比较起来应该是最好的,虽然效果并不是特别理想。

现在我们引入标准的F值或者F1-score:

\[F1_{score} = 2\frac{P·R}{P+R}\]

算法 Precision Recall \(2\frac{P·R}{P+R}\)
算法1 0.5 0.4 0.44
算法2 0.7 0.1 0.175
算法3 0.02 1.0 0.039

现在看来的确是算法1要优秀一些。

F值是对精确度和召回率的一个很好的权衡,两种极端的情况也能很好的平衡:

  • P=0 R=0时,F1 = 0
  • P=1 R=1时,F1 = 1

5.Using Large Data Sets

1) Data For Machine Learning

这小节举了个实际的例子,就是有人用好几种不同的算法来预测同一个事件,在数据不是很大的时候准确率会有明显的差别,但是当数据足够大的时候,他们之间的准确率几乎是相等的,所以说大数据是很重要的。


MARSGGBO♥原创







2017-8-7

Andrew Ng机器学习课程笔记--week6(精度&召回率)的更多相关文章

  1. Andrew Ng机器学习课程笔记--汇总

    笔记总结,各章节主要内容已总结在标题之中 Andrew Ng机器学习课程笔记–week1(机器学习简介&线性回归模型) Andrew Ng机器学习课程笔记--week2(多元线性回归& ...

  2. Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

    Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.h ...

  3. Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)

    title: Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归) tags: 机器学习, 学习笔记 grammar_cjkRuby: true --- 之前看过一遍,但是总是模 ...

  4. Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计

    Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7392408.h ...

  5. Andrew Ng机器学习课程笔记(四)之神经网络

    Andrew Ng机器学习课程笔记(四)之神经网络 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7365730.html 前言 ...

  6. Andrew Ng机器学习课程笔记(三)之正则化

    Andrew Ng机器学习课程笔记(三)之正则化 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7365475.html 前言 ...

  7. Andrew Ng机器学习课程笔记(二)之逻辑回归

    Andrew Ng机器学习课程笔记(二)之逻辑回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364636.html 前言 ...

  8. Andrew Ng机器学习课程笔记(一)之线性回归

    Andrew Ng机器学习课程笔记(一)之线性回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364598.html 前言 ...

  9. Andrew Ng机器学习课程笔记--week11(图像识别&总结划重点)

    一.内容概要 Photo OCR Problem Decription and pipeline(问题描述和流程图) Sliding Windows(滑动窗口) Getting Lots of Dat ...

随机推荐

  1. forEach( ) map( ) for( in ) for ( of )

    ====forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索 ...

  2. Spring MVC 以.html为后缀名访问获取数据,报406 Not Acceptable错误。

    如题,最近以spring mvc作为后台框架,前端异步获取数据时(.html为后缀名的访问方式),报406 Not Acceptable错误.当初都不知道啥原因,前后台都没报错就是返回不了数据,于是查 ...

  3. [luogu P1967][NOIp2013] 货车运输

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

  4. [补] winpcap编程——EAP协议与EAPSOCKET实现

    EAP SOCKET Implement Mentohust 时间:20161115,大二上 ## 准备. 什么是 EAP 协议 ? WIKI : https://en.wikipedia.org/w ...

  5. 第一个java——swap()交换方法

    其实这学期的java课开了将近四星期了,加上开学前的小小预习.编写不下于二十几个java了. 可这一有关swap()方法的java确实是首次迷惑不解到处寻求解决的程序. 课堂上老师有关类.方法.对象的 ...

  6. 任务调度---crontab

    1.   crontab相当于windows下的任务与计划,可以设定定时任务,周期执行的任务 2.   设置任务调度文件 crontab  -e       进入任务界面,添加如下命令 0 2 * * ...

  7. MAC上安装EndNote破解版的链接文件 以及某些安装好后有可能替换执照文件的方法

    一款非常好用的论文写作软件不多形容,开整: X7 mac版本(非免破解版本)链接: 点击我 X8 mac版本(大客户版本,免破解非常好用) 点击我 X8 windows版本(大客户版本,免破解非常好用 ...

  8. Go语言学习笔记(七)杀手锏 Goroutine + Channel

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 Goroutine Go语言的主要的功能在于令人简易使用的并行设计,这个方法叫做Goroutine,通过Gorou ...

  9. 送你一双看见时间的眼睛--时间master软件

    开篇语 最近感觉自己时间管理非常错乱,所以去网上找了一些有关于时间管理的软件.然后发现了好几款还不错的软件或者是微信上的应用,下面我把我的一些使用情况以及如何使用的方法写出来,给有需要的朋友进行借鉴! ...

  10. 推荐两款Windows管理工具

    1.babun(cgywin) 一款包含cgywin的类似linux shell的软件,熟练linux脚本的小伙伴们,一定会在她身上找到快感. 2.pslist 微软官方的一款很强大的bat脚本,很实 ...