吴恩达机器学习[11]-机器学习性能评估、机器学习诊断

本文探讨了机器学习中的关键问题,包括模型评估、选择、偏差与方差的诊断,以及正则化的应用。通过学习曲线和训练、验证、测试集的划分,帮助决定如何改进模型性能。针对过高偏差和方差,提出了增加训练样本、减少特征、调整正则化参数等解决方案。此外,还讨论了神经网络模型的特征及其优缺点,强调了正则化在大型神经网络中的重要性。
摘要由CSDN通过智能技术生成

本节学习目标:帮助我们在面对机器学习系统开发或改进机器学习系统性能时,选择接下来该走哪条路

决定下一步做什么

下面继续使用预测房价的学习例子。你可能遇到模型在测试集上的预测效果不好的情况,此时可选择下例五种方法来解决。但如何决定该用哪种方法呢?
在这里插入图片描述
接下来的内容,将围绕如何评估机器学习算法的性能、机器学习诊断法(Machine learning diagnostic)展开。
在这里插入图片描述

评估假设 Evaluating a hypothesis

学习目标:学习如何评价机器学习算法学习到的假设,涉及到过拟合、欠拟合问题

之前讲过,仅靠假设函数的训练误差小,不能说明它一定是一个好假设。
那么如何判断是否过拟合呢?对于简单的例子,可以通过画出它的假设函数判断;但对于特征不止一个的例子,画图法就用不上了。
在这里插入图片描述
下面展示评价假设函数的方法。
将训练集划分为两部分:训练集、测试集(一般按照7:3的比例随机划分)。前者用于训练,后者用于测试假设算法性能。
在这里插入图片描述

  • 我们以线性回归算法的例子,展示这种方法。
    在这里插入图片描述
  • 然后展示它在逻辑回归算法的运用。
    判断假设函数性能方法包括两种。1、计算代价函数 J t e s t ( θ ) J_{test}(\theta) Jtest(θ)。2、错误分类(Misclassification error),又称0/1分类(0/1 Misclassification error)
    在这里插入图片描述

模型选择和训练、验证、测试集

引入:对于实际问题,我们将如何确定一个数据集最合适的多项式次数、如何选择正确的特征来构造学习算法、以及如何为代价函数选择合适的 λ \lambda λ值呢,这类问题统称为模型选择问题(model selection problems)。对于这类问题,我们需要将数据集划分为训练集、验证集、测试集(train, validation, test sets)。
学习目标:认识训练集、验证集、测试集(train, validation, test sets)、以及如何使用它们进行模型选择。

还是使用过拟合的例子,仅靠假设函数的训练误差小,不能说明它一定是一个好假设。这就是为什么训练误差小,不能用于判断对该样本的拟合好坏,也不能用于判断该假设函数对新样本的泛化能力。

在这里插入图片描述
下面回归 模型选择问题。可以建立一系列假设函数,然后分别训练它们,在测试集上计算误差。
然后如何判断模型的泛化能力呢?此时不能再使用测试集了。

  • 如果我们用训练集来拟合参数 θ 0 、 θ 1 \theta_0、\theta_1 θ0θ1等,那么拟合后的模型在训练集上的效果是不能预测出假设函数对于新样本的泛化能力的好坏了。因为这些参数能很好地拟合训练集,因此很有可能在训练集上表现得很好,但对于其他新样本则不然。
  • 测试集不能再判断模型泛化能力的原因也是同理。因为我们是对测试集进行拟合,通过拟合测试集得到参数d(选择哪个假设模型)。这意味着假设函数在测试集上的效果,并不能用来公正地估计这个假设对于从未见过的新样本的效果。
    在这里插入图片描述
    为了解决上述模型选择中出现的问题,通常采用如下方法评估假设函数
  • 给定一个数据集,将它划分为三个部分:训练集(train sets)、交叉验证集(或称 验证集 ( validation sets))、测试集(test sets),划分比例一般为6:2:2。
    在这里插入图片描述
  • 相应地,分别定义不同数据集的误差:训练误差、验证误差、测试误差
    在这里插入图片描述
  • 面对模型选择问题时。
    我们使用验证集来选择模型。也就是说,对于每种假设函数,分别训练得到最小代价函数对应的 θ \theta θ值。然后用验证集测试,计算得到 J c v J_{cv} Jcv,来观察这些假设函数在交叉验证集上的效果如何。最后,选择交叉验证误差最小的假设作为我们的模型(也就是选出了合适的多项式次数d)。
    此后,使用测试集来估计算法选出的模型的泛化误差
    在这里插入图片描述

诊断偏差与方差 Diagnosing bias vs. variance

引入:学习算法表现不理想的原因,一般是偏差比较大(high bias problem)、或方差比较大(high variance problem)。换句话来说,要么是欠拟合、要么是过拟合。此时,找到问题的原因,能帮助找到改进算法效果的有效途径。
学习目标:学会如何观察算法,然后判断问题在于偏差还是方差。

偏差:期望输出与真实标记的差别。
方差:模型输出与期望输出之差的平方和。
在这里插入图片描述

从欠拟合和过拟合图引入。
在这里插入图片描述
中间大图的玫红曲线 表示训练误差随着d的变化的变化趋势。
中间大图的红线 表示测试误差随着d的变化的变化趋势。交叉验证误差的对应变化趋势类似。
在这里插入图片描述
下图能很好展示出高方差和高偏差的区别。漏斗形曲线的左右两侧,分别代表高偏差问题高方差问题

  • 对于高偏差(Bias)问题交叉验证误差和训练误差都很大
  • 对于高方差(Variance)问题交叉验证误差远大于训练误差小
    在这里插入图片描述

正则化和偏差、方差 Regularization and bias/variance

引入:正则化与方差、偏差直接有什么关系呢?
学习目标:深入讨论偏差、方差的问题,研究它们和算法的正则化之间的关系、以及正则化是如何影响偏差和方差。

下图展示线性回归正则化代价函数,那么如何自动选择出一个最合适的正则化参数 λ \lambda λ的值呢?
在这里插入图片描述

对于假设函数 h θ ( x ) h_\theta(x) hθ(x),定义代价函数 J ( θ ) J(\theta) J(θ)(带正则化项),以及训练集、交叉验证集、测试集的代价函数。

注意:在没有使用正则化时,定义训练集、验证集、测试集的代价函数(误差)等同于 J ( θ ) J(\theta) J(θ)。使用正则化时,定义训练集、验证集、测试集的代价函数等同于 J ( θ ) J(\theta) J(θ)去掉正则化项。

在这里插入图片描述
下面展示自动选择 λ \lambda λ步骤

  • 取一系列 λ \lambda λ值。一般首先取 λ \lambda λ为0,然后依次让 λ \lambda λ以两倍速度增长,直到一个比较大的值。
  • 分别进行训练,获得代价函数取最小值时的 λ \lambda λ
  • 利用交叉验证集进行评价。分别计算交叉验证集的误差,取误差最小的模型作为最终选择。
  • 用选出来 λ \lambda λ对应的 θ \theta θ值,在测试集上测试。观察假设函数在测试集的表现,从而判断模型泛化能力优劣。
    在这里插入图片描述
    那么,改变 λ \lambda λ值时,交叉验证误差和训练误差怎么变化呢?
  • 对于训练误差。当 λ \lambda λ很小时, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)可能很小。但 λ \lambda λ很大时,出现高偏差问题,拟合效果变差, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)很大。
  • 对于交叉验证误差。当 λ \lambda λ很小时,可能出现过拟合问题, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)可能很大。但 λ \lambda λ很大时,出现高偏差问题,拟合效果变差, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)很大。会存在一个最小值,此时偏差、误差达到一个平衡点。
    在这里插入图片描述

学习曲线 Learning curves

学习目标:结合所学知识,设计出一个方法-学习曲线,从而对学习算法进行诊断。学习曲线能检查学习算法是否正常运行,以及改进算法的表现。检查偏差、方差问题。

学习曲线(learning curve)介绍
横坐标:训练集样本总数m。纵坐标:训练误差 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ), 交叉验证误差 J c v ( θ ) J_{cv}(\theta) Jcv(θ)

  • 训练误差变化:m很小时,假设能很好地拟合曲线;m变大,假设拟合效果会可能会慢慢变差。
  • 交叉验证误差变化:m很小时,假设的泛化能力差;m越大,假设往往越能获得更好地泛化表现。
    在这里插入图片描述
    下面展示高偏差、高方差时,学习曲线的效果。
    对于高偏差。训练样本数m增加到一定程度时,训练集误差与交叉验证误差会非常接近,且变化趋势近乎直线。
  • 训练误差变化:m很小时,假设能很好地拟合曲线。随着m的增加,训练误差会逐渐增加,最后接近交叉验证误差。因为此时假设的参数很少(假设能力有限),又有很多数据,当m很大的时候,训练集和交叉验证集的误差将会非常接近
  • 交叉验证误差变化:m很小时,假设的泛化能力差。m越大,假设往往越能获得更好地泛化表现。当m增加到一定程度时,往往能找到最可能拟合数据的直线。此时,即使再增加m值,验证误差也基本不变。
  • 结论:当学习算法存在高偏差问题时,使用更多的训练样本数据对于改善算法表现无益
    在这里插入图片描述
    对于高方差。训练样本数m增加,训练集误差与交叉验证误差之间仍存在一段很大的差距。
  • 训练误差变化:m很小时,假设能很好地拟合曲线。随着m的增加,可能仍然会有些过拟合,但完全拟合变得更加困难。相应地,训练误差变大,但总体训练集误差还是很小。
  • 交叉验证误差变化:因为存在过拟合,因此交叉验证误差一直很大。即使m很小,交叉验证误差也会很大。
  • 结论:当学习算法存在高偏差问题时,使用更多的训练样本数据对于改善算法表现有益
    在这里插入图片描述

决定接下来做什么 revisited

引入:我们已经学习过了机器学习评价方法、讨论了模型选择以及偏差和方差的问题。那么,这些算法将怎样帮助我们弄清改进方法是否有用呢?

下面回到最初的例子,模型性能不好该怎么办呢。

解决方法适用范围识别方法
增加训练样本数高方差问题过拟合。学习曲线中,m很大时 J t r a i n ( θ ) , J c v ( θ ) J_{train}(\theta),J_{cv}(\theta) Jtrain(θ)Jcv(θ)差值很大
减小特征数高方差问题过拟合。学习曲线中,m很大时 J t r a i n ( θ ) , J c v ( θ ) J_{train}(\theta),J_{cv}(\theta) Jtrain(θ)Jcv(θ)差值很大
增加特征数高偏差问题欠拟合。学习曲线中,m很大时 J t r a i n ( θ ) , J c v ( θ ) J_{train}(\theta),J_{cv}(\theta) Jtrain(θ)Jcv(θ)接近
增加多项式高偏差问题欠拟合。学习曲线中,m很大时 J t r a i n ( θ ) , J c v ( θ ) J_{train}(\theta),J_{cv}(\theta) Jtrain(θ)Jcv(θ)接近
减小 λ \lambda λ高偏差问题欠拟合。
增加 λ \lambda λ高方差问题过拟合 。

在这里插入图片描述
上述知识与神经网络联系如何呢?

神经网络特征优势劣势
简单的神经网络模型。隐藏层很少,隐藏单元数少。模型计算量小。此时模型参数不多,容易出现欠拟合
较大型神经网络。隐藏层单元数很多,或者隐藏层多。模型性能较好,过拟合可以用正则化方法修正。此时模型参数很多,容易出现过拟合(主要潜在问题)。模型计算量很大。

一般来说,正则化修正后的大型神经网络,比小型神经网络效果更好。但计算量相对较大。此外,隐藏层层数一般选择1。

在这里插入图片描述

参考链接
网易版吴恩达机器学习课程
吴恩达机器学习 网易云课堂

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值