整理自Andrew Ng的machine learning课程week6.

目录:

  • Advice for applying machine learning (Decide what to do next)

    • Debugging a learning algorithm
    • machine learning diagnostic
    • Evaluating a hypothesis
    • Model selection and Train / validation / test set
  • Bias and Variance
    • Diagnosing bias and variance
    • Regularization and bias / variance
  • learning curve
    • High bias
    • High variance
  • summary of decide what to do next
  • diagnosing neural network
  • Model complexity effects
  • Build a spam classifier
    • Prioritzing what to work on
    • Error analysis
  • Error matric for skewed classes
    • precision / recall
    • trade off precision and recall
  • Data for machine learning

1、Advice for applying machine learning  (Decide what to do next)

1.1、debugging a learning algorithm

假设你用regularized linear regression去解决预测房价的问题,但是,当你用模型去预测新的房价数据时,发现预测的误差很大,那么接下来你会怎么办呢?

  • 获取更多的训练数据?
  • 尝试使用更小的特征集合?
  • 尝试使用更多的特征?
  • 尝试增大$\lambda$?
  • 尝试减小$\lambda$?

对于以上的一些做法,你会怎么做呢?依靠直觉吗?

现实中常常有人仅仅依靠直觉去选取某一种做法,比如说获取更多的训练数据,但是当他们耗费了大量的时间去完成这件事之后,却发现模型性能并没有什么提升,依靠直觉显然是一种不划算的做法

1.2、machine learning diagnostic

A test that you can run to gain insight what is/isn't working with a learning algorithm, and gain guidance as to how best to improve its performance.

machine learning diagnostic是一个test,它可以让我们知道一个特定的算法是否是有用的,并且可以指导我们,怎么做才可以最大的提升模型的性能。

Diagnostic可能会耗费你的时间,但是相比于在实战中耗费大量的时间却发现结果不好而言,这点时间是值得的。

1.3、Evaluating a hypothesis

如何去评估一个模型的好坏?就像之前一直说过的,训练模型做得好,并不一定说明这个模型就是好的,这个模型很有可能是过拟合的(如下图),那么对新的数据集而言,这个模型可能做的并不好。

所以用训练数据集上的误差评估模型的好坏是不可以的。

通常的做法是,将数据集分为训练数据(70%)和测试数据(30%),然后:

  • 用训练数据去训练模型,得到模型参数
  • 用上面的模型去预测测试数据集上的数据,计算测试集上的误差error

用测试集上的error去评估模型的好坏

对于linear regression:error是($\frac{平方和}{m_{test}}$)

对于logistic regression:

1.4、Model selection and Train / validation / test set

如果现在有多个模型alg1,alg2,alg3......,如下所示,10个不同阶的模型(代表着不同的模型复杂度),我们需要选择最好的一个模型,那么如何去选择呢(依照怎样的标准去选择)?

如果仿照1.3的做法,先用训练数据训练出来模型,再用测试数据去计算误差,选择在测试数据集上误差最小的模型作为我们最终选定的模型;

思考一下,如果这么做的话,其实是和仅用训练数据误差评估模型好坏是一个道理,此时选择出的只是在我们所用的测试集上误差最小的模型,但是用其他的测试集的话,可能并不是当前的模型误差最小,那么这个误差并不能真正反映模型的好坏;

通常的做法是,将数据集分成train set / 训练集(60%),cross validation set / 验证集(20%),test set / 测试集(20%),然后:

  • 用训练集去训练多个模型,获取每个模型的参数
  • 用训练好的这些模型去预测验证集,计算验证集上的误差,选择出其中误差最小的模型
  • 计算测试集在误差最小的模型上的误差,作为此模型的评估标准

各个集合的误差计算如下:

2、Bias and Variance

在之前的文章中就接触过bias和variance的概念,这里回顾一下:

训练集和验证集和误差计算如下:

2.1、Diagnosing bias and variance

随着d(多项式的阶数)的增大,training error和cross validation error的变化如下:

当模型比较简单的时候,训练的程度低,有欠拟合的现象(high bias),此时训练误差和测试误差(或者验证误差)都比较大,当d越来越大,训练的程度越来越高,训练误差和测试误差都在减小,到达一个点之后,模型过于复杂,训练误差在继续减小,但是此时已经出现了过拟合现象(high variance),测试误差越来越大,即:

  • Bias(underfit):训练误差和测试误差都高,两者差不多
  • Variance(overfit):训练误差小,测试误差很大,远大于训练误差

2.2、Regulization and bias / variance

$\lambda$是惩罚因子,如下图所示:

  • 当$\lambda$十分大时,模型相当于只有是常数估计,图像近似为一条横线,欠拟合(high bias)
  • 当$\lambda$十分小时,惩罚项的作用不大,模型出现过拟合(high variance)
  • 我们需要选取一个恰当的$\lambda$,使得模型刚刚好

那么问题来了,如何选择一个恰当的$\lambda$呢?我们可以尝试:

  • 设定一系列的$\lambda$=[0, 0.01, 0.02, 0.04, 0.08, ......., 10.24],比如说这12个$\lambda$;
  • 构造一组不同的模型(with different degrees or other variants)
  • 对于每个模型遍历每个$\lambda$,用训练数据去训练这些组合确定的模型,得到最终的模型参数;
  • 计算验证集上的误差;
  • 选取模型中使得验证集误差最小的模型;
  • 计算选出的模型在测试集上的误差,评估得到的模型的好坏;

利用一系列的$\lambda$我们可以看到随着$\lambda$的增大,training error和cv(cross validation) error的变化:

  • 当$\lambda$非常小时,train error很小,test error很大,此时训练程度高,模型过拟合;
  • 随着$\lambda$的增大,train error越来越大,test error在减小,模型过拟合现象在缓和;
  • 当$\lambda$增大到某个点之后,train error和test error都开始变大,因为此时模型是欠拟合的;

3、learning curves

这一部分主要是来评估训练数据集的大小和模型误差之间的关系,对于训练误差而言:

  • 当training set非常小(1,2,3个训练数据),train error就会接近0,因为如果点少的话,当然可以找到一个曲线几乎完美的拟合这几个点;
  • 当training set变大,train error也会相应的变大;
  • 当training set的数据量达到一个值后,train error会趋于不变;

3.1、High bias

红线处是理应达到的误差下限,训练误差和测试误差都远高于理想的误差

对此可以用下图来解释,此时出现的问题是模型太过于简单,这个时候获取更多的训练数据对模型是没什么帮助的

 3.2、High variance

测试误差远大于训练误差,此时出现了过拟合现象;

可用下图来解释这个现象,模型太过于复杂,惩罚也不大到位,所以模型出现了过拟合现象,此时如果可以增大训练数据的数目,对模型应该是有帮助的;

4、summary of decide what to do next

针对文章一开始提出的问题,经过一系列的梳理,有了答案:

  • 获取更多的训练数据?                 解决high variance问题(overfitting)
  • 尝试使用更小的特征集合?          解决high variance问题(overfitting)
  • 尝试使用更多的特征?                 解决high bias问题(underfitting)
  • 尝试增大$\lambda$?                   解决high variance问题(overfitting)
  • 尝试减小$\lambda$?                   解决high bias问题(underfitting)

5、Diagnosing neural network

  • 具有较少的参数的neural network容易underfitting,同时也computationally cheaper;
  • 具有较多的参数的neural network容易overfitting,同时也computationally expensive(此时可用regulization去处理过拟合问题);
  • 默认是一层的hidden layer,但是也可以用cv set去选择最合适的hidden layer数目;

6、Model complexity effects

  • 低阶多项式(简单模型)有high bias和low variance,训练集和测试集的误差都大;
  • 高阶多项式(复杂模型)有high variance和low bias,训练集误差小,测试集误差大;
  • 我们最终想要得到的是一个中和的模型,拟合数据能力不错,泛化能力也不错;

7、Build a spam classifier

7.1、proritizing what to work on

系统设计:对于给定的邮件数据,可以给每个邮件设计一个vector,向量中每个元素代表了一个word,word在邮件中就设为1,不在就设为0,搜索邮件中最常出现的words。

如下图所示:

那么,如何去提升分类器的精度呢?

  • 收集更多的数据?
  • 加入更加经验性的特征?(header data in spam)
  • 处理输入数据?(reprocessing miss-spelling)

7.2、Error analysis

推荐的解决机器学习问题的方法是:

  • start with a simple algorithm,implement it quickly, and test it on cv data
  • 画出learning curve去决定一些策略是否是有用的,比如more data,more features
  • 手动检测cv的误差,找出最常出错的那些点,分析它

比如说,5000封邮件,有100封被错分了,此时思考:

  • 这100封邮件属于邮件里面的什么类别(如大多是steal password、miss-spelling)
  • 用什么办法可以把这个类型的邮件分对(比如加入新的特征),然后把新的策略加入到模型中去;

得到了新的策略之后,就将其加入到模型中看一看结果是否更好,此时需要一个评判标准,一个简单粗暴的评判标准;

在评估模型的时候我们要得到一个real error number,如果新的策略加入之后,这个error减小了,那就值得继续做下去,否则就不需要再做下去了;

8、Error metrics for skewed classes

对于癌症判别的问题,训练出来的分类器在测试集上达到了1%的error rate,乍一看觉得结果很好啊;

但是,实际上测试集中只有0.5%的病人患有癌症,也就是说,即时我们的分类器只是简单的将所有人都认为不患癌症,也可以达到0.5%的error rate,那我们能说这个分类器比之前的那个1% error rate的分类器好吗?显然不能啊,因为这根本就不是一个分类器啊!

这种类别分布的情况就称为skewed classes,此时用error rate来评估模型是不是进步了就不准确了

8.1、precision / recall

对于skewed classes,常用的误差分析方法是precision / recall

$precision=\frac{True positive}{number of predicted positive}=\frac{True positive}{Ture positive + False positive}$

代表了在所有的预测为患癌症的病人中,实际患癌症的比例

$recall=\frac{True positive}{number of actural positive}=\frac{True positive}{Ture positive + False negative}$

代表在实际患有癌症的病人中,被预测出来的比例

8.2、trade off precision and recall

precision和recall是一个需要与实际情况相结合的量;

比如在癌症问题上,使用logistic regression,

如果为了安抚病人的心理,只有在非常确定(概率大)病人得了癌症时才会判定为得了癌症(y=1),那么就会把分类中的阈值设置的很大,比如0.7,0.9,此时,我们有higher precision,lower recall

如果为了病人的健康,那么只有有一些可能性,就判定为癌症,以便于他可以去治疗,那么就会把分类中的阈值设置的很大,比如0.3,此时,我们有higher recall,lower precision

precision和recall的图像类似如下,曲线不确定:

现在这里有两个值,我们如何去选择模型呢,如何指导一些策略对模型是否有改善的作用呢?

这里就有了$F_1 score=2\frac{PR}{P+R}$,F1 score是一个同时考虑到了precision和recall的值:

  • 当P=0 or R=0,则F1 score=0
  • 当P=1 and R=1,则F1 score=1

9、Data for machine learning

有人曾说过:it‘s not who has the best algorithm that wins, it's who has the most data.,这句话对吗?看两个例子:

  • 有可以提供足够多的信息的features,$x \in R_n$,此时去预测y;

    如:for breakfast I ate _____ eggs.(two,too,to)

  • 在只有房屋面积信息时,预测房价;

思考:对于一个专家(针对指定问题)而言,她们可以解答吗?对于第1个问题,可以;对于第二个问题而言,显然是不可以的;

那么回到最初的问题,big data一定会赢吗?

不一定,如果信息不够的话,再多的数据也没有用

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2knxyesxia040

转载于:https://www.cnblogs.com/echo-coding/p/8989416.html

machine learning 之 Neural Network 3相关推荐

  1. Machine learning of neural representations of suicide and emotion concepts identifies suicidal youth

    Machine learning of neural representations of suicide and emotion concepts identifies suicidal youth ...

  2. 【面向代码】学习 Deep Learning Convolution Neural Network(CNN)

    转载自: [面向代码]学习 Deep Learning(三)Convolution Neural Network(CNN) - DarkScope从这里开始 - 博客频道 - CSDN.NET htt ...

  3. 读书笔记1|深度学习入门:Machine Learning Yearning

    Machine Learning Yearning中文版 有一段时间有点摸不着头脑,因为是自学python,深度学习,分类太多,人脸识别,对象检测,对象追踪,图像处理,语义分割等.有点眼花缭乱,太多细 ...

  4. Paper翻译:《A Novel Convolutional Neural Network Based Model for Recognition and Classification of App》

    论文名称:<A Novel Convolutional Neural Network Based Model for Recognition and Classification of Appl ...

  5. 机器学习(Machine Learning)深度学习(Deep Learning)资料(Chapter 2)

    机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2) - tony的专栏 - 博客频道 - CSDN.NET 注:机器学习资料篇目一共 ...

  6. What are Kernels in Machine Learning and SVM?

    一个关于kernel的很好的解析: https://www.quora.com/What-are-Kernels-in-Machine-Learning-and-SVM 将它摘录过来了. What a ...

  7. 台大李宏毅Machine Learning 2017Fall学习笔记 (11)Convolutional Neural Network

    台大李宏毅Machine Learning 2017Fall学习笔记 (11)Convolutional Neural Network 本博客主要整理自: http://blog.csdn.net/x ...

  8. Machine Learning week 5 quiz: programming assignment-Multi-Neural Network Learning

    一.ex4.m %% Machine Learning Online Class - Exercise 4 Neural Network Learning% Instructions % ------ ...

  9. Machine Learning week 4 quiz: programming assignment-Multi-class Classification and Neural Networks

    一.ex3.m %% Machine Learning Online Class - Exercise 3 | Part 1: One-vs-all% Instructions % --------- ...

  10. 论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network Learning

    论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network Learning NDSS 2021录用文章 目录 论文学习笔记 POSEID ...

最新文章

  1. 通常,Node.js如何处理10,000个并发请求?
  2. Git异常:Cannot delete the branch 'test1' which you are currently on
  3. WebSphere社区版,Geronimo1.1八卦和GBean架构
  4. 纯html网页重定向与跳转
  5. 让选择更具明确性:土方计算方法的选择——方格网or三角网
  6. 基于JAVA的教务排课系统.rar(源码+截图+数据库)
  7. HDB3码编码C语言实现
  8. Unity 本地化比较实用的实现方案
  9. 操作系统-为什么进程之间的通信必须借助操作系统内核功能?
  10. 跟着团子学SAP DMS—在SAP中通过DMS上传文档基本操作(CV01N/CV02N/CV03N/CV04N)
  11. 极客日报:苹果或推出粉色款iPhone 13;拼多多再超阿里
  12. Sql Server 生成 Word 文档 表结构
  13. Logstash 时区问题
  14. 架构师工程攻城略地需要具备的八大核心能力
  15. DontDestroyOnLoad带来的麻烦
  16. 护眼灯真能护眼睛吗?2022护眼台灯怎么样选择好
  17. linux 双线接入配置(电信联通双线)+三线接入配置
  18. 杰理之对箱 TWS 通话有回音,噗噗声,卡顿问题【篇】
  19. 【超详细Django网站开发过程9】便利店管理系统之——管理员登录、注销功能
  20. (找规律)23,41,18,64,? 问号处填什么?

热门文章

  1. 5 个底层程序设计逻辑,决定你有多牛逼
  2. 高并发大容量 NoSQL 解决方案探索
  3. NoSQL 已死:我们不需要他了
  4. 如何测网络稳定性_讲座|复杂网络上的非线性动力学:网络结构如何决定系统稳定性?...
  5. 最全Redis49个面试题目及答案:线程设计+哨兵+复制+事务+集群+持久化等
  6. Hadoop 集群的基准测试
  7. 部分手机浏览器存在将ajax请求当成广告过滤的情况,及解决方案
  8. 【Python】- yield 使用浅析
  9. poj 1743 Musical Theme【后缀自动机】
  10. css案例学习之父子块的margin