Machine Learning(Andrew)Week6(上)
采用机器学习的一些建议
类似引言的部分
假设你已经训练好了一个线性回归模型来预测房屋的价格,但是你在做新房屋价格预测的时候,发现误差太大了,这时该怎么办呢?
线性回归成本函数:
(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(上)相关推荐
- Machine Learning - Andrew Ng on Coursera (Week 6)
本篇文章将分享Coursera上Andrew Ng的Machine Learning第六周的课程,主要内容有如下,详细内容可以参考文末附件: 评价机器学习算法 Diagnosing bias vs. ...
- Machine Learning - Andrew Ng on Coursera (Week 5)
本篇文章将分享Coursera上Andrew Ng的Machine Learning第五周的课程,主要内容有如下,详细内容可以参考文末附件: 代价函数及后向算法 Cost function(代价函数) ...
- Machine Learning - Andrew Ng on Coursera (Week 4)
本篇文章将分享Coursera上Andrew Ng的Machine Learning第四周的课程,主要内容有如下,详细内容可以参考文末附件: 动机 神经网络 应用 动机 为什么要引入神经网络?在分类问 ...
- Machine Learning - Andrew Ng on Coursera (Week 3)
本篇文章将分享Coursera上Andrew Ng的Machine Learning第三周的课程,主要内容有如下,详细内容可以参考文末附件: 分类问题及模型表示 逻辑回归模型 多类别的分类问题 解决过 ...
- Machine Learning - Andrew Ng on Coursera (Week 2)
本篇文章将分享Coursera上Andrew Ng的Machine Learning第二周的课程,主要内容有如下,详细内容可以参考文末附件: 设置作业环境 多变量线性回归 参数的解析算法 Octave ...
- Machine Learning - Andrew Ng on Coursera (Week 1)
转载自:http://1.kaopuer.applinzi.com/?p=110 今天分享了Coursera上Andrew Ng的Machine Learning第一周的课程,主要内容有如下,详细内容 ...
- Machine Learning - Coursera week6 Evaluating a learning algorithm
Evaluating a learning algorithm 1. Design what to do next 在预测房价的学习例子,假如你已经完成了正则化线性回归,也就是最小化代价函数J的值.假 ...
- Spark Machine Learning 03 Spark上数据的获取、处理与准备
Chap 03 Spark上数据的获取处理 Spark上数据的获取.处理与准备 MovieStream,数据包括网站提供的电影数据.用户的服务信息数据以及行为数据. 这些数据涉及电影和相关内容(比如标 ...
- 在 Android 上部署Machine Learning(ML) 模型
@如何在 Android 上部署机器学习 (ML) 模型 ** 如何在 Android 上部署Machine Learning(ML) 模型 ** 目录 Android上的 ML 项目工作流程 在 A ...
- IBM Machine Learning学习笔记(一)——Exploratory Data Analysis for Machine Learning
数据的探索性分析 1. 读入数据 (1)csv文件读取 (2)json文件读取 (3)SQL数据库读取 (4)Not-only SQL (NoSQL)读取 (5)从网络中获取 2. 数据清洗 (1)缺 ...
最新文章
- vue中数组长度_vue.js - 如何获得动态数组的数组长度 - SO中文参考 - www.soinside.com...
- 思科:四分之三的物联网项目将以失败告终
- 再谈编程范式-程序语言背后的思想
- flash玩转cookie
- Qt Assistant快速指南
- 一个按键控制数码管的开和关_一个按键控制一个数码管
- 《Adobe After Effects CS6完全剖析》——动画:最重要的是关系
- Objective-C文件流操作
- axure命令行_axure怎么做计算器
- centos7按报错dracut
- 浏览器中的 HTTP 请求从发起到结束经历的所有阶段
- 全球系留无人机系统行业调研及趋势分析报告
- 罗技鼠标驱动怎么下载?
- TextCNN模型原理
- linux smtp ip伪造,邮箱伪造之搭建匿名SMTP服务器
- 纯干货!!!Python开发必备!!!70+本图书合集(PDF+源码)
- python 背景音乐程序代码_python 喜马拉雅 音乐下载 演示代码
- React tsx 生成随机验证码
- PHP入门-配置虚拟主机
- MIT物理学家观察超冷原子形成量子龙卷风晶体
热门文章
- Cisco基础(六):配置目前网络环境、项目阶段练习
- Git 分支 - 分支的新建
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.2——增加自定义task
- Java 核心内容相关面试题【3】
- 【转】如何更改VS2005的启动环境
- oracle的安装与卸载
- jQuery报错:Uncaught ReferenceError: $ is not defined
- so easy 的弹出层——使用jquery
- 线性表的链式存储——单链表的遍历与优化
- springboot-aop