吴恩达机器学习(应用机器学习的建议)

(1)决定下一步做什么

假设你已经实现了正则化的线性回归来预测房屋价格,然而,当在一组新的测试集上使用该假设时,在预测上出现了不能接受的错误,接下来会做什么呢?也就是说当调试学习算法时,当面对测试集算法效果不佳时,会怎么做呢?你可能从下面的五种方法中选择。

(1)采集更多的训练样本;(有时候并没有效果)

(2)尝试选用更少的特征;

(3)尝试获取更多的特征;

(4)尝试增加特征多项式;

(5)尝试减小或增大正则化参数的值。
在这里插入图片描述
由此引出机器学习诊断法:这是一种测试法,通过执行这种测试能够了解算法在哪里出了问题,也能告诉你要想改进一种算法的效果,什么样的尝试才是有意义的,这些诊断法的执行与实现需要花很多时间来理解和实现。

(2) 评价算法学习得到的假设函数

为了确保可以评价假设函数的准确性,是否存在过拟合,需要将训练集分成两部分,第一部分成为训练集,第二部分成为测试集。典型按照7:3比例,如下:

在这里插入图片描述
接下来,展示一种典型的方法来训练和测试你的学习算法。

一、线性回归算法

(1)首先对训练集进行学习得到参数θ。具体来说就是最小化训练误差J(θ),这里的J(θ)是用那70%的数据得到的。

(2)接下来,计算出测试误差J_test
在这里插入图片描述
二、逻辑回归算法

(1)首先对训练集进行学习得到参数θ。具体来说就是最小化训练误差J(θ),这里的J(θ)是用那70%的数据得到的。

(2)接下来,计算出测试误差J_test
在这里插入图片描述
三、错误分类(0/1分类错误)
在这里插入图片描述

(3)模型选择和训练集、交叉验证集、测试集

对于过拟合问题,在过拟合中的学习算法即便对训练集拟合的很好,也并不代表它是一个很好的假设。

在这里插入图片描述
通常来说,这就是为什么训练集误差不能用来判断该假设对新样本的拟合好坏;具体来讲,如果用这些参数来拟合训练集,就算假设在训练集上表现地很好,也并不意味着该假设对训练集中没有的新样本有多好的泛化能力。

更为普遍的规律,如果参数对某个数据集拟合的很好(比如训练集或者其他数据集),那么用同一数据集计算得到的误差(比如训练误差)并不能很好地估计出实际的泛化误差,即该假设对新样本的泛化能力。

一、模型选择问题

在多项式回归时,该如何选择次数作为假设模型呢?
在这里插入图片描述
你可以这么做,首先选择第一个模型,然后最小化训练误差,这样就可以得到参数向量θ,然后依次选择其余的模型,得出参数向量θ。
在这里插入图片描述
接下来,对所有这些模型求出测试集误差J_test(θ),如何从这些模型中选出最好的一个,应该看哪个模型有最小的测试误差。这样做看似比较合理,其实并不然,存在不好的地方。
假设对这个例子,选择五次多项式模型,看一看这个模型的泛化能力怎么样,可以观察这个五项式对测试集的拟合情况,但问题是这样仍然不能公平地评估出这个假设的泛化能力。
原因:拟合了一个额外的参数d,也就是多项式的次数,用测试集拟合了参数d,选择了一个能最好地拟合测试集的参数d的值,因此,参数向量θ5在测试集上的性能很可能是对泛化误差过于乐观的估计。

在这里插入图片描述****************************************************************************************************

所以为了解决模型选择出现的问题,通常会采用下面的方法来评估假设:

给定一个数据集,把它分成三个部分:训练集、交叉验证集、测试集,它们的比例为3:1:1

交叉验证集作为评判选择的标准,选择合适的模型。

测试集则作为算法性能的评判。

在这里插入图片描述在这里插入图片描述
所以对于上述的模型选择,要用交叉验证集来进行选择模型,而不是原来的测试集,具体来说,如下所示:
在这里插入图片描述
接下来,对所有这些模型求出交叉验证集误差,如何从这些模型中选出最好的一个,应该看哪个模型有最小的交叉验证集误差。
在这里插入图片描述
在如今的机器学习应用中,的确有很多人用测试集来选择模型,通过测试集来选择多项式的次数,然后仍在测试集上计算误差,把它当作理想的泛化误差,这并不是一个好的方法。将数据集分成训练集、验证集、测试集是更好的选择。

(4)诊断偏差与方差

当运行一个学习算法时,如果这个算法表现不理想,往往是出现两种情况:

(1)偏差比较大(欠拟合问题)

(2)方差比较大(过拟合问题)

在这里插入图片描述 根据训练误差和验证误差函数:

从图中可以看出,随着多项式次数的增大,训练集上的偏差逐渐变小,而交叉验证集上的偏差在减小到一定程度后开始升高。
在这里插入图片描述诊断偏差和方差:

假设得出一个学习算法,而这个算法并没有表现地像你期望的那么好,如果交叉验证误差或者测试集误差都很大,如何判断此时学习算法出现了高偏差问题还是高方差问题?

如果有高偏差(欠拟合问题),发现交叉验证误差和训练误差都会很大,所以如果算法有偏差问题,它的训练误差将会比较大,交叉验证误差也会比较大且接近训练误差。
如果有高方差(过拟合问题),发现训练误差会很小,代表训练集合拟合得非常好,而交叉验证误差会远远大于训练误差。
在这里插入图片描述

(5)正则化和偏差、方差

正则化可以有效地防止过拟合,但正则化跟算法的偏差和方差有什么关系呢?

这一节中将深入探讨偏差和方差与算法正则化之间的关系,以及正则化是如何影响偏差和方差。

在加入正则化项后根据的λ不同所得图如下:
在这里插入图片描述
如何自动地选择出一个最适合的正则化参数的λ值呢?

(1)通常的做法,选取一系列想要尝试的λ值,首先可能考虑不使用正则化以及一系列可能会试的值,如下, 得到这12组模型之后。

(2)接下来要做的是选用第一个模型,然后最小化代价函数,得到某个参数向量θ。继续上述步骤,会得到全部参数θ。
在这里插入图片描述
(3)然后用交叉验证集来评价它们,即测出每一个参数θ在交叉验证集上的平均误差平方和,然后选择12模型中平均误差平方最小的那个模型作为最终选择。
在这里插入图片描述
当正则化参数变化时,交叉验证误差和训练误差怎么变化

这里的图显得有些简单和理想化,对于真实的数据,得到的曲线可能比这更复杂,但是通过这样的图可以更好地理解各种情况,也有助于确认选择的正则化参数值λ是否合适。

在这里插入图片描述

(6)学习曲线

学习曲线是一种很好的工具来判断某一个学习算法是否处于偏差、方差问题,或者二者都有。

根据样本的大小与误差的关系我们可以画出一般的学习曲线模样:从图中可以看出随着样本数量m的增大,平均训练误差越来越大,相反地,交叉验证误差越来越小。
在这里插入图片描述
假设学习算法出现高偏差的问题:

交叉验证误差减小将会很快变为水平而不再变化,只要达到一定数量的训练样本,这样能得到最拟合数据的直线

训练误差会逐渐增大,最后接近交叉验证误差,这就是学习算法处于高偏差情形时的学习曲线的大致走向。

结论:
如果一个学习算法有高偏差,随着增加训练样本,发现交叉验证误差不会明显下降了,基本变成水平,所以如果学习算法正处于高偏差的情形,选用更多的训练集数据对于改善算法表现并不能起到一定作用。
在这里插入图片描述
假设学习算法出现高方差的问题:

如果考虑增大训练集的样本数,交叉验证误差将会一直下降,所以在高方差的情形中,使用更多的训练集数据对改进算法是有帮助的。
在这里插入图片描述

使用更多的训练集数据的图像走势。
在这里插入图片描述

(7)决定接下来做什么

哪些方法有助于改进学习算法的效果,可以看一下之前提到过的问题,看看它们适合什么的模型:
在这里插入图片描述本章回顾:
当在进行神经网络拟合的时候,可以选择任何一种。

(1)一个相对比较简单的神经网络模型(只有一个隐藏层且隐藏单元数较少),这样的模型参数就不会很多,容易出现欠拟合,这种小型的神经网络最大的优势在于计算量较小;

(2)一个拟合较大型的神经网络模型(有多个隐藏层且隐藏单元数较多),这样的模型参数一般很多,更容易出现过拟合,这种结构的一大劣势在于当有大量神经元时,这种结构会有很大的计算量,最主要的潜在问题还是它容易出现过拟合现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值