吴恩达《机器学习》学习笔记十一——应用机器学习的建议

经过前十次笔记的学习,已经掌握了线性回归、逻辑回归和神经网络三种经典的机器学习算法,并学会了使用正则化来防止过拟合。下面将跳出具体的算法,学习对机器学习模型的评估以及应用过程中优化的一些建议。

一、训练完模型后下一步要做什么

在设计机器学习的系统时,能够明白如何选择一条最合适、最高效的道路是一切的源头,如果没有合适的技巧,可能会在不断地尝试过程中浪费很多时间,比如选择什么模型、是否要特征映射、选择哪些特征、是否要花时间多采集数据等等。这些事情可能既花费很多时间,但最后还可能对系统性能的提升没有帮助

所以下面会给出一些建议和指导,帮助开发者明白怎样进行选择是有益于模型性能提升的。具体来说,假如你在开发一个机器学习系统或想试着改进一个机器学习系统的性能,你应该如何决定,接下来该选什么操作。

为了更形象地说明,用房价预测的模型来作为例子:
在这里插入图片描述
假设我们已经完成了带有正则化的线性回归模型来预测房价,代价函数如上图所示,但是当将训练好的模型用于一组新的数据来进行预测时,发现有很大的误差,那么接下来我们该怎么做来进一步改善这个模型?

下面是可能进行的一些尝试:
在这里插入图片描述
比如可能会想是数据样本不够要去获取更多的训练样本;
可能是特征太多过拟合了所以要减少一些特征的数量;
也可能是特征数量太少要增加一些;
也可能是线性模型太简单要加入一些多项式特征来增加模型复杂度;
还可能想到调节λ等的一些超参数。

这些尝试可能会非常耗费时间,而且最关键的是,如何选择很可能是凭人们的感觉,这样就有太大的主观性。

但是有一系列简单的方法,能让你事半功倍,快速地排除一些对模型的优化没有效果的可能选项,大大地节省尝试的时间

下面将介绍怎样评估机器学习算法的性能,然后将介绍这种能够事半功倍的方法——机器学习诊断法,这是一种测试,通过测试,你可以知道算法在哪里出现了问题,这也就是说,想要改进算法性能,应该进行什么样的尝试才是有意义的
在这里插入图片描述

二、评估算法与模型选择

在这之前,评估假设函数好坏与否是通过代价函数值来判断的。但是在训练集上代价函数小并不能说假设函数一定好,也可能在新的测试集上表现很差,也就是过拟合现象的存在。

过拟合现象我们还可以通过画出假设函数查看与数据样本的拟合曲线来判断,但是当你的特征很多的时候,如下图所示,假设函数h(x)也是无法可视化的。因此我们需要另一种评估假设函数的方法
在这里插入图片描述

1.训练集与测试集

一般来说,对于一个数据集,我们在训练之前需要将其进行划分为两部分:
在这里插入图片描述
要分为训练集和测试集两部分,一般的原则是,70%的数据当做训练集,30%的数据当做测试集,当然,在划分之前要打乱数据,保证划分的随机性

2.训练/测试步骤

使用训练集对参数进行优化,最小化代价函数J(θ);然后用训练好的参数去计算测试集上的代价函数值,测试模型的泛化能力

线性回归:
在这里插入图片描述
逻辑回归:
在这里插入图片描述

3.模型选择

如果你不知道你的模型应该用哪些多项式特征,或者不知道正则化系数应该设置成多少是最合适的,这类问题被称为模型选择问题

下面看一个模型选择的例子:
在这里插入图片描述
选择具体用多少次幂的特征组合来拟合数据比较好,我们需要对每个模型训练出它们各自的参数,并计算出各自对应的测试集上的误差,选择一个较小的作为最终的模型但是这样也不能说明它的泛化性能一定好,因为测试集已经用于选择模型了,没有额外的数据来衡量它的泛化性能,只是一个乐观的估计。

4.数据集新的划分——验证集的加入

相比于之前将数据集划分为训练集和测试集两种,现在我们将数据集划分为三部分:训练集、验证集和测试集,训练集用于训练模型,验证集用于模型选择,测试集用于测试模型的泛化能力。
在这里插入图片描述
它们相应的代价函数:
在这里插入图片描述
这边不同的是,之前选择模型的时候是通过测试集误差来选择的,现在通过验证集误差来选择:
在这里插入图片描述
那么测试集就可以来衡量它的泛化能力了。

三、偏差与方差

当运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况,要么是偏差较大,要么是方差较大;换句话说,要么是欠拟合问题,要么是过拟合问题,在这种情况下,搞清楚是偏差问题还是方差问题或两者都有关系是非常重要的,因为这样能很快找到有效的解决方法和途径来改进算法。

1.偏差与方差的理解

回顾一下线性回归的欠拟合和过拟合的情况:
在这里插入图片描述
前面介绍了训练集和验证集的概念,这里我们来看一下它们随着假设函数的次数变高,它们的变化:
在这里插入图片描述
图中横坐标表示多项式的次数d,纵坐标表示误差即代价函数的值。那么,当d很小时,假设函数很简单,是欠拟合的情况;当d很大时,假设函数过于复杂,是过拟合的情况。对于训练集误差,欠拟合时误差很大,随着假设函数变复杂,误差会越来越小,过拟合时会非常小,如图中紫红色的曲线所示;而对于验证集误差,欠拟合和过拟合时的误差都会很大,即泛化能力很差,只有合理拟合的情况才会相对比较小,如图中大红色曲线所示

从这张图中我们可以来区分偏差和方差区域:
在这里插入图片描述
左边的部分是偏差高的情况,它对应着欠拟合,特点是训练集和验证集的误差都很高;右边的部分是方差高的情况,它对应着过拟合,特点是训练集误差很小,但是验证集误差很大

2.正则化和偏差方差的关系

正则化可以很好的防止过拟合,那么正则化和偏差方差又有什么关系呢?先来看一个例子:
在这里插入图片描述
这是带有正则化的线性回归,正则化系数的选择会对结果产生很大影响:当λ很大时,参数都会变得接近于0,假设函数近似等于一个常数;当λ很小时,起不到太大防止过拟合的作用,假设函数又会过于复杂,所以选择这个系数非常重要。

这边我们先给出一些表达式:假设函数、带正则化的代价函数、以及三个数据集上不带正则化的代价函数表达式,如下所示:
在这里插入图片描述
然后我们看一下对正则化系数λ进行模型选择的过程:
在这里插入图片描述
和前面选择多项式次数的情况非常相似,求出每种λ对应模型的参数,然后选择其中在验证集上误差最小的作为最终的模型,测试集误差来衡量其泛化能力。

那么改变正则化系数λ对训练集和验证集的误差会有什么影响呢?
在这里插入图片描述
图中横坐标为正则化系数λ,纵坐标为代价函数的值。当λ很小时,对应着过拟合的情况,所以训练误差小,验证误差大;当λ很大时,对应着欠拟合的情况,所以训练误差和验证误差都大。图中蓝色的曲线是训练集误差,紫红色曲线是验证集误差;左边对应高方差情况,右边对应高偏差情况。

3.学习曲线

如果你想检查你的学习算法运行是否一切正常,或者希望改进算法的表现,那么绘制学习曲线是非常有用的,这是一个很好的工具。可以用学习算法来判断一个学习算法是否处于偏差、方差问题,或者是两者都有。

先从一个例子来理解一些学习曲线:
在这里插入图片描述
注意图中横坐标是训练集样本的个数,纵坐标是误差,那么一个确定的假设函数的形式,在训练集上,当训练样本很少的时候很容易拟合,而且误差会很小,随着样本数越来越多,平均误差的值也将越来越大,所以训练集上的代价函数的变化如蓝色曲线所示;但是对于验证误差来说,训练样本少使得模型的泛化能力较弱,所以验证集上的误差较大,而随着训练样本增多,模型学习的越来越好,泛化能力逐渐变强,所以验证集上的代价函数的变化如紫红色曲线所示

上面介绍的是一般情况,下面我们看一下特例,首先是高偏差的学习曲线:
在这里插入图片描述
高偏差的情况就是欠拟合的情况,从上面右边的图可以看出来,增大数据样本到一定程度,训练误差和验证误差的变化就都不会太大了,所以变化曲线是左边图中所示,它们都趋向于一个较大的值然后平稳发展。所以遇到高偏差的情况,增大数据样本改善不大

然后是高方差的情况:
在这里插入图片描述
高方差的情况就是过拟合的情况,随着训练数据的增多,过拟合还是会过拟合,但是平均误差也会慢慢地上升,而验证误差则会慢慢的下降,特点是验证误差与训练误差之间有比较大的间隔。但是随着数据样本的增多,可以看到对学习算法还是有所改善的

四、决定接下来要做什么

有了上面的知识,知道如何评估算法、什么是模型选择、偏差与方差以及学习曲线的概念,我们就可以根据评估算法的结果来进行相应的尝试,使得模型性能得以优化,一些明显无意义的操作可以直接不用管。让我们再回到开头的问题:
在这里插入图片描述
这时就可以理解这些操作能够各自应对什么问题:

增加训练数据是应对高方差的;
减少特征数量是应对高方差;
增加额外的特征与增加多项式特征是应对高偏差;
减小正则化系数λ是应对高偏差;
增大正则化系数是应对高方差。

最后,我们将以上的知识结合到神经网络模型中,因为神经网络是目前比较流行的模型:
在这里插入图片描述
简单的神经网络会欠拟合,复杂的神经网络容易过拟合,具体怎么选择神经网络的层数以及每个隐藏的神经元个数,可以用到上面模型选择的方法,划分数据集,用验证集选出最合适的模型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值