采用机器学习的一些建议

类似引言的部分

假设你已经训练好了一个线性回归模型来预测房屋的价格,但是你在做新房屋价格预测的时候,发现误差太大了,这时该怎么办呢?

线性回归成本函数:

(1)找更多的训练数据

(2)减少特征数

(3)增加特征数

(4)增加多项式特征(比如x1x2,x1^2……)

(5)增大λ

(6)减小λ

机器学习诊断

诊断(Diagnostic):就是一种对学习算法是否工作的测试,同时指导提高算法性能。

诊断会费些时间来实现,但是实现之后你就可以有效的利用时间了。

对hypothesis的评估

在实现房屋预测的系统时,我们得到模型:

该模型对训练数据有很好的拟合

但是,在对新房屋预测时,却表现很糟糕。显然,发生了过拟合。我们有没有办法,让模型还未投入新数据使用之前,就检验是否过拟合呢?

有!通常数据D并不是全部都拿当训练数据的,我们会偷偷藏起来一部分做测试来检验模型。

一般是70%拿去当训练数据,拿30%做测试。30%的数据做测试,其实就是看模型的泛化能力,在《《A Few useful things to Know About machine Learning》读后感》中说到,泛化能力,其实就是在新的数据上的表现能力。

模型的选择/训练/验证/测试

看上面房屋预测的曲线图,如果参数θ在训练数据上拟合的很好的话,那J(θ)在训练数据上的错误就要比没看过的数据上小很多。

(就是Hsuan-Tien Lin所讲的Ein表现很好,而Eout实际比较大。这样Ein和Eout就不接近了。)

如何选模型

所以,我们如何选择模型呢?

比如,我们要在上面的10个模型中做选择。选哪一个呢?

根据前面说的,需要测试误差。所以,70%的D去训练上面的h,求出了各自的参数θ。然后用30%的数据做测试求误差。假设,我们进行误差测试之后,发现h5,即d=5的模型误差很小。

我们选它做模型。

但是这里就有个问题,如果h5对30%的测试数据,存在运气很好的情况,它因为运气好而拟合的好,所以误差小。针对这样的情况,又想出了一个法子,进行交叉验证。就是把数据集分成三个部分:60%训练数据;20%交叉验证数据;20%测试数据。

这样就有三个数据集需要算误差:

误差的计算方式一样,但目的不一样。

第一个求误差是为了求参数θ。

第二个求误差是为了选出模型。

第三个求误差是为了测试模型好不好。

还是上面的10个模型选择问题。

(1)用训练数据求参数θ

(2)用交叉验证数据求出误差最小的模型

(3)用测试数据测试这个模型的泛化能力。

诊断bias和variance

这个在《《A Few useful things to Know About machine Learning》读后感》中也提到了。

Bias是预测的h们的平均值和实际的偏差;

Variance是预测的h们之间的差异。

拟合问题Andrew中Week3中也提到过。

可以看到,特征选择维度越高拟合的就越好,就会造成过拟合。当我们计算这三个模型的train error(简称Jtrain)和cross validation error(简称Jcv),发现:

观察这个图:发现特征维度低的时候,欠拟合,Jtrain和Jcv都比较大,接着二者随着特征增多而减少;特征增加到了一个程度之后,Jtrain继续减少,Jcv反而开始变大;特征维度很高时,Jtrain很小,Jcv很大,过拟合。

欠拟合时,bias大,Jtrain和Jcv都比较大,但是Jtrain≈Jcv;

过拟合时,variance大,Jtrain很小,Jcv很大,Jcv>>Jtrain。

为防止过拟合,我们采用的是正规化的方式,即在J后面加一项regularization项。(Week3(下)) 

合适的lambda

但是,λ的大小对拟合程度有很大影响: 

λ太大会使θj趋于0,最后只剩一个不用受惩罚的阈值θ0,造成欠拟合;

λ太小对θ影响就不大,还是过拟合。

所以λ要选的合适才行。

怎么选到合适的λ呢?以逻辑回归为例:

(1)数据集分为:训练集,交叉验证集和测试集。

(2)λ从0,0.01,0.02之后每个都是前一个的2倍,一直到10.24。一共12个λ。

(3)12个λ对应12个模型

(4)用训练数据集训练12个模型,分别求出它们的参数θ

(5)用交叉验证集求出Jcv最小的模型

(6)用测试集求(5)中选出的模型的泛化误差

看看λ的大小如何影响bias和variance:

大的λ,高bias,Jtrain≈Jcv,欠拟合

小的λ,高variance,Jtrain<<Jcv,过拟合

学习曲线

学习曲线是用来检验算法的学习效果。这里观察随着训练样本的数量(m)增加,Jtrain和Jcv的变化情况的曲线。

我们举个模型如下的例子:

由上面可以看出,随着训练数据m增加,Jtrain增加,Jcv变小。所以,学习曲线为:

从学习曲线来考虑bias和variance问题——增加m

(1)高bias问题

如果模型是

可以看出模型欠拟合,这时增加m

发现拟合效果还是糟糕。

这说明了,如果一个模型高bias,Jtrain≈Jcv,增加训练数据量是没用的。

(2)高variance问题

对于高variance的问题,Jtrain<<Jcv,增加训练样本数量,可以减小Jtrain和Jcv之间的差距,可以提高模型的效果。

综上,增加训练样本数量,对高variance有用,对高bias作用不大。

总结

回到本节最开始的问题:

假设你已经训练好了一个线性回归模型来预测房屋的价格,但是你在做新房屋价格预测的时候,发现误差太大了,这时该怎么办呢?

(1)找更多的训练数据

(2)减少特征数

(3)增加特征数

(4)增加多项式特征(比如x1x2,x1^2……)

(5)增大λ

(6)减小λ

通过本节的分析,我们应该知道了它们的作用。

(1)找更多的训练数据——适用于高variance

(2)减少特征数——适用于高variance

(3)增加特征数——适用于高bias

(4)增加多项式特征(比如x1x2,x1^2……)——适用于高bias

(5)增大λ——适用于高bias

(6)减小λ——适用于高variance

神经网络和拟合问题

这是一个small的神经网络,参数少,很容易欠拟合,但是它计算很容易

这个的神经网络比较复杂,参数多,容易过拟合,计算复杂。用正规化项解决过拟合问题。

Machine Learning(Andrew)Week6(上)相关推荐

  1. Machine Learning - Andrew Ng on Coursera (Week 6)

    本篇文章将分享Coursera上Andrew Ng的Machine Learning第六周的课程,主要内容有如下,详细内容可以参考文末附件: 评价机器学习算法 Diagnosing bias vs. ...

  2. Machine Learning - Andrew Ng on Coursera (Week 5)

    本篇文章将分享Coursera上Andrew Ng的Machine Learning第五周的课程,主要内容有如下,详细内容可以参考文末附件: 代价函数及后向算法 Cost function(代价函数) ...

  3. Machine Learning - Andrew Ng on Coursera (Week 4)

    本篇文章将分享Coursera上Andrew Ng的Machine Learning第四周的课程,主要内容有如下,详细内容可以参考文末附件: 动机 神经网络 应用 动机 为什么要引入神经网络?在分类问 ...

  4. Machine Learning - Andrew Ng on Coursera (Week 3)

    本篇文章将分享Coursera上Andrew Ng的Machine Learning第三周的课程,主要内容有如下,详细内容可以参考文末附件: 分类问题及模型表示 逻辑回归模型 多类别的分类问题 解决过 ...

  5. Machine Learning - Andrew Ng on Coursera (Week 2)

    本篇文章将分享Coursera上Andrew Ng的Machine Learning第二周的课程,主要内容有如下,详细内容可以参考文末附件: 设置作业环境 多变量线性回归 参数的解析算法 Octave ...

  6. Machine Learning - Andrew Ng on Coursera (Week 1)

    转载自:http://1.kaopuer.applinzi.com/?p=110 今天分享了Coursera上Andrew Ng的Machine Learning第一周的课程,主要内容有如下,详细内容 ...

  7. Machine Learning - Coursera week6 Evaluating a learning algorithm

    Evaluating a learning algorithm 1. Design what to do next 在预测房价的学习例子,假如你已经完成了正则化线性回归,也就是最小化代价函数J的值.假 ...

  8. Spark Machine Learning 03 Spark上数据的获取、处理与准备

    Chap 03 Spark上数据的获取处理 Spark上数据的获取.处理与准备 MovieStream,数据包括网站提供的电影数据.用户的服务信息数据以及行为数据. 这些数据涉及电影和相关内容(比如标 ...

  9. 在 Android 上部署Machine Learning(ML) 模型

    @如何在 Android 上部署机器学习 (ML) 模型 ** 如何在 Android 上部署Machine Learning(ML) 模型 ** 目录 Android上的 ML 项目工作流程 在 A ...

  10. IBM Machine Learning学习笔记(一)——Exploratory Data Analysis for Machine Learning

    数据的探索性分析 1. 读入数据 (1)csv文件读取 (2)json文件读取 (3)SQL数据库读取 (4)Not-only SQL (NoSQL)读取 (5)从网络中获取 2. 数据清洗 (1)缺 ...

最新文章

  1. vue中数组长度_vue.js - 如何获得动态数组的数组长度 - SO中文参考 - www.soinside.com...
  2. 思科:四分之三的物联网项目将以失败告终
  3. 再谈编程范式-程序语言背后的思想
  4. flash玩转cookie
  5. Qt Assistant快速指南
  6. 一个按键控制数码管的开和关_一个按键控制一个数码管
  7. 《Adobe After Effects CS6完全剖析》——动画:最重要的是关系
  8. Objective-C文件流操作
  9. axure命令行_axure怎么做计算器
  10. centos7按报错dracut
  11. 浏览器中的 HTTP 请求从发起到结束经历的所有阶段
  12. 全球系留无人机系统行业调研及趋势分析报告
  13. 罗技鼠标驱动怎么下载?
  14. TextCNN模型原理
  15. linux smtp ip伪造,邮箱伪造之搭建匿名SMTP服务器
  16. 纯干货!!!Python开发必备!!!70+本图书合集(PDF+源码)
  17. python 背景音乐程序代码_python 喜马拉雅 音乐下载 演示代码
  18. React tsx 生成随机验证码
  19. PHP入门-配置虚拟主机
  20. MIT物理学家观察超冷原子形成量子龙卷风晶体

热门文章

  1. Cisco基础(六):配置目前网络环境、项目阶段练习
  2. Git 分支 - 分支的新建
  3. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.2——增加自定义task
  4. Java 核心内容相关面试题【3】
  5. 【转】如何更改VS2005的启动环境
  6. oracle的安装与卸载
  7. jQuery报错:Uncaught ReferenceError: $ is not defined
  8. so easy 的弹出层——使用jquery
  9. 线性表的链式存储——单链表的遍历与优化
  10. springboot-aop