Coursera机器学习(Andrew Ng)笔记:ML算法指导与系统设计
2017-05-10 10:53
162 查看
ML算法指导与系统设计
机器学习初学者,原本是写来自己看的,写的比较随意。难免有错误,还请大家批评指正!对其中不清楚的地方可以留言,我会及时更正修改当机器学习的效果不理想时,可以尝试以下操作:
1 获取更多的训练数据样本
2 减少特征数量
3 增加一些额外的特征
4 多项式特征
5 增加或减小参数λ
实际使用时,不能只随机使用一种方法,下面我们来探索一些方法来进行诊断,帮助进行选择上述方法。
评估假设函数
一个假设函数可能在训练集上误差很低,但在新的数据集上可能仍旧不准确(过拟合),我们可以把训练样本分成训练集和测试集(一般按7:3的比例)。使用这两个数据集的过程如下:1 使用训练集进行最小化Jtrain(Θ)得到Θ
2 计算测试集误差Jtest(Θ)
-测试集误差-
1 对于线性回归:Jtest(Θ)=12mtest∑mtesti=1(hΘ(x(i)test)−y(i)test)2
2 对于分类问题(又称作0/1误分类误差):
err(hΘ(x),y)={1if hΘ(x)≥0.5 and y=0 or hΘ(x)<0.5 and y=10otherwise
对于测试集的平均测试误差可以表示为:
TestError=1mtest∑i=1mtesterr(hΘ(x(i)test),y(i)test)
模型选择和训练/验证/测试集
为了选择一个更合适的模型,我们可以选择多个不同阶数的假设函数(例如d=1,2,3...),分别来看一看它的误差结果。这里,我们还使用一个交叉验证集,即将训练样本分成3部分,分别为训练集、交叉验证集、测试集,一般按照6:2:2的比例进行分配,现在我们可以计算三个不同的误差值
1 使用不同阶数的假设函数在训练集上进行训练得到Θ(d)
2 使用Θ(d)在交叉验证集上计算误差,得到使得误差最小的d
3 估算泛化误差Jtest(Θ(d))
偏差Bias 和方差 Variance
学习算法的效果不理想,要么是偏差大,要么是方差大,对应的分别是欠拟合和过拟合。搞清楚偏差和方差的关系,可以帮助我们更好的找到算法的问题所在,有效改进算法。训练集误差:Jtrain(θ)=12m∑mi=1(hθ(x(i))−y(i))2
交叉验证误差:Jcv(θ)=12mcv∑m[cv]i=1(hθ(x(i)cv)−y(i)cv)2
对于训练集来说,随着假设函数次数的增大,算法由欠拟合过渡到过拟合,误差减小。
对于测试集或交叉验证集来说,当假设函数次数很小或很大时,欠拟合或过拟合均造成交叉验证误差很大,而当次数是当时,交叉验证误差达到最小。
对应的,左边的这一端就是高偏差问题,右边的这一端就是高方差问题。
正则化与偏差/方差
在过拟合的情况下,我们来看一下λ对误差的影响。当λ很小时,相当于没有进行正则化,依旧是过拟合的状态,此时,训练误差很小,而交叉验证误差很大。当λ很大时,惩罚过于严重,假设函数变成一条水平线,此时的训练误差和交叉验证误差都很大。
学习曲线
首先来看再给定假设函数次数的情况下,训练集大小与误差之间的关系当训练集样本很小时,假设函数可以很容易的拟合的很好,训练误差也很小;当样本数量增大时,想让假设函数拟合的更好,就变得更加困难了,因此,训练误差会越来越大。
显然,当训练集样本数量很少时,泛化程度很差,交叉验证误差就很大。只有当训练集样本数量很大时,才能够更好的拟合数据,交叉验证误差较小。
考察高偏差的情况,当样本数量很大时,训练集误差和交叉验证误差都很高,此时增大训练样本来改善算法性能显然是没有意义的。
再来考察高方差的情况,当训练样本数量增大时,拟合变的越来越困难,训练误差增大,但总体来说还是很小。对于交叉验证误差,由于假设函数处于过拟合的状态,交叉验证误差会一直很大,当训练样本数量增大时,交叉验证误差呈递减趋势。高方差的一个主要特点是,当训练样本数量m很大时,训练误差和交叉验证误差有很大的差距。
总体上,随着m的增大,两个误差是逐渐靠近的,因此,对于高方差的情况,增加样本数量可能会有帮助。
如何选择有效的方法
1 获取更多的训练数据样本:高方差2 减少特征数量:高方差
3 增加一些额外的特征:高偏差
4 增加多项式特征或次数:高偏差
5 减小参数λ:高偏差
6 增大参数λ:高方差
机器学习系统设计
推荐方法步骤
1 首先构建一个很简单的机器学习算法,保证能够快速实现它,即使结果不完美,也要运行一遍,并使用交叉验证集来检验数据2 画出学习曲线,看算法是否存在高偏差或高方差,或者其他问题。分析之后,再来决定是否使用更多样本,更多特征或一些其他方法
3 误差分析:对验证集中造成较大误差的样本进行分析,寻找这些样本可能存在的规律,这个过称可能启发出一些新的思路和想法。在交叉验证集上进行误差分析
数值评估的重要性
如交叉验证错误率等误差度量值。设定某个实数来评估学习算法,并衡量她的表现偏斜类问题Skewed Classes
使用合适的误差度量值,就是偏斜类问题。-查准率precision和召回率recall-
希望检测的出现较少的类用来计算查准率和召回率
查准率与召回率之间的权衡
在很多应用中,我们希望能够保证查准率和召回率的相对平衡。比如在逻辑回归的例子中,当hθ(x)≥threshold是,预测结果为1,当hθ<threshold时,预测结果为0。在之前的例子中,threshold=0.5,实际上,我们可以根据实际情况更改阈值。在癌症预测的例子中,阈值增大,会得到更高的查准率和更低的召回率;阈值减小,会得到更高的召回率和更低的查准率。
-F 值-
F值可以用来作为对查准率和召回率平衡的一个度量,一般也叫做F1值,其计算公式如下
F1=2PRP+R
F值越大,说明查准率和召回率的平衡性越好
机器学习中的数据
一个较大的训练集可以帮助提高学习算法的性能,但在特征信息不足等情况下,再多的训练集也没用。相关文章推荐
- Coursera机器学习(Andrew Ng)笔记:异常检测与推荐系统
- 系统分析与设计笔记
- 《ASP.NET办公自动化系统开发实例导航》笔记二 系统管理模块设计
- NET 应用架构指导 V2 学习笔记(六) 软件架构和设计方法
- NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
- NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
- NET 应用架构指导 V2 学习笔记(十五) 数据访问层指导 技术、性能、安全、部署、以及设计步骤考虑
- CMS-一篇关于分类资源管理系统设计思路的笔记
- ICE笔记(06):简单文件系统的设计、实现
- 本人开发系统--新生报到与数据统计管理系统--数据库设计及相关查询SQL语句笔记
- NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
- 设计模式学习笔记3:用于系统解藕的Observer
- ARM系统设计笔记3--迈出第一步
- ARM系统设计笔记2--STR710
- 基于usb的数据采集系统设计 学习笔记一
- 软件工程笔记之 - 贵族专制、民主政治和系统设计
- ARM系统设计笔记1
- ARM系统设计笔记5--阶段总结
- NET 应用架构指导 V2 学习笔记(十) 表现层的主要技术及设计步骤
- 最近要读NET Distributed Applications这本书,并做学习笔记.系统地学习一遍分布式应用程序开发和设计