资讯专栏INFORMATION COLUMN

吴恩达机器学习笔记-应用机器学习的建议

songjz / 424人阅读

摘要:评估假设我们之前已经学习过一些机器学习的算法,现在我们来谈谈如何评估算法学习得到的假设。他们对于测试集的平均误差为这个给与我们测试集中错误分类的比例。当增加多项式的级数时,训练集的误差将会减小。以上,为吴恩达机器学习第六周部分的笔记。

评估假设

我们之前已经学习过一些机器学习的算法,现在我们来谈谈如何评估算法学习得到的假设。当发现预测的结果和实际的数据有误差的时候,我们需要进行一些调整来保证预测的准确性,大部分情况下,有以下几种办法来调整假设函数:

获取更多的训练集

减少特征的数量

尝试使用更多的特征

尝试使用多项式特征

增大或减小lambda

假设函数相对于训练集可能得到的误差很小,比如在过拟合的情况下,这时候就不能肯定假设函数是准确的。因此,我们有时候将数据集分成两块:训练集和测试集,一般来说训练集占70%,测试集30%。定义训练集的误差为$J_{train}(Theta)$,测试集为$J_{test}(Theta)$。这样,我们要做的就是:通过训练集训练来最小化$J_{train}(Theta)$和计算测试集$J_{test}(Theta)$的误差。
对于线性回归:

$$ J_{test}(Theta) = frac{1}{2m_{test}}sum_{i=1}^{m_{test}}(h_Theta(x_{test}^(i)))^2 $$

对于分类问题:
当$h_Theta(x)>=0.5且y=0$或$h_Theta(x)<0.5且y=1$ 时,$err(h_Theta(x),y) = 1$;否则,$err(h_Theta(x),y) = 0$。
他们对于测试集的平均误差为:

$$ Test Error = frac{1}{2m_{test}}sum_{i=1}^{m_{test}}err(h_Theta(x_{test}^(i)),y_{test}^(i)) $$

这个给与我们测试集中错误分类的比例。

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

由于学习算法可能对于训练集的数据相对很吻合,但不代表这是一个好的假设,之前说过了,这可能是过拟合的情况,从而导致预测的结果在测试集中的表现会不尽如人意。从当前数据集训练出的假设函数的误差是会比其他数据集要小的。
提供多个不同级数的多项式模型时,我们可以使用系统的方法来鉴别是否是最好的函数。为了选择最佳的假设,可以对于每一个不同的级数的多项式进行计算,得出他们的误差,从而比较出哪一个才是最合适的。
上文中我们将数据集分成了训练集和测试集两部分,实际情况中经常会分为三部分,其中60%为训练集,20%为交叉验证集,20%为测试集。我们可以分别计算这三部分的误差,

接下来:

通过训练集来针对每一个级数的多项式来最优化参数theta

通过交叉验证集来找到最误差最小的级数d

使用$J_{test}(Theta^d)$来估计使用测试集得到的模型的泛化误差,这样的话,多项式的级数就不用通过测试集训练得到了。

诊断偏差与方差

当运行一个学习算法时,若这个算法的结果不理想,多半是出现两种情况:要么是偏差比较大(high bias),要么是方差比较大(high variance)。换句话说,要么是欠拟合问题要么是过拟合问题。
高偏差导致欠拟合,高方差导致过拟合。理想情况下,我们要在这两者之间找到最佳的平均值。
当增加多项式的级数d时,训练集的误差将会减小。同时当增加级数d到达某个点时,交叉验证误差会渐渐的减小,然后其会伴随着d的增加而增加,图像为一个凸曲线。如下图:

总的来说:

正则化和偏差、方差

在之前的课程中已经学习过通过正则化来解决过拟合问题,现在再来谈谈正则化和偏差方差之间的关系。

在上图中,当$lambda$很大,对于$ heta1$,$ heta1$..的惩罚都很大,则假设函数将会等于或近似于$ heta_0$,最终得到的假设函数就是一条直线,因此这个假设对于数据严重欠拟合。另一个情况当$lambda$很小时,趋向于0,那么正则化项趋向于0,得到的假设函数则会出现过拟合的情况。只有当我们取一个比较合适的$lambda$时,我们才能得到对数据拟合比较合理的$ heta$的值。
那么如何选择合适的模型和合适的正则化参数$lambda$呢,具体有如下几个步骤:

1. Create a list of lambdas (i.e. λ∈{0,0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24});
2. Create a set of models with different degrees or any other variants.
3. Iterate through the λs and for each λ go through all the models to learn some ThetaΘ.
4. Compute the cross validation error using the learned Θ (computed with λ) on the J_CV ​(Θ)  without regularization or λ = 0.
5. Select the best combo that produces the lowest error on the cross validation set.

Using the best combo Θ and λ, apply it on J_test ​(Θ)  to see if it has a good generalization of the problem.

将$lambda$的取值和$J( heta)$的曲线画出来如下所示:

$J_{train}( heta)$随着$lambda$值的增加而增加,因为$lambda$的值增大会对应着高偏差问题,此时连训练集都不能很好的拟合,当$lambda$很小时,对应着你可以很容易地用高次多项式拟合你的数据。对于交叉验证的误差,如图中粉色的图像所示,当$lambda$很大时,会出现欠拟合问题,因此是那一片是高偏差区域,此时交叉验证集的误差会很大,当$lambda$很小时,会出现过拟合问题,对应的是高方差问题,因此交叉验证集的误差也会很大。同样的,总会有中间的某个点对应的$lambda$表现的结果正好合适,交叉验证误差和测试误差都很小。

学习曲线

当训练集很小的情况下,比如只有两三条数据的时候,我们很容易训练一个二次的算法来拟合数据,并且算法的误差可能几乎为0,因此,

当训练集增大时,二次函数的误差将会增加

随着集合数据的增加,最终的误差会渐渐趋向于平稳

具体变化如下图所示:

随着训练集的增加,交叉验证集的误差将会慢慢减小知道趋向于某一个值,因为拟合数据越多,就越能拟合出合适的假设。
那么如果出现了高偏差的情况,学习曲线会变成什么样子:

若训练集量比较小,那么拟合效果当然不好,导致交叉验证集的误差会很大,那么随着训练集的增加,拟合效果渐渐的变好了,交叉验证集的误差也会渐渐变小,当训练集增大到某一个量时,我们可能就会找到一条最有可能拟合数据的直线,并且此时即便继续增加训练集的样本容量,还是会得到一条差不多的结果。那么对于训练误差,一开始也是很小的,但在高偏差的情况下,训练集的误差会逐渐增大直到最后接近交叉验证误差,这是因为你的参数很小,但又有很多数据,当m很大时,训练集和交叉验证集的误差将会非常接近。总的来说能得出一个结论,如果一个算法有高偏差,那么选用更多的训练集数据并不能很好的改善算法。
对于高方差的情况,如下图:

一开始训练集的误差是很小的,但随着训练集容量的增加,误差会渐渐变大,也就是说数据越多,就越难将训练集数据拟合的很好,但总的来说,训练集的误差还是很小。那么对于交叉验证集,由于是高方差的情况,误差会一直都很大,虽然也会慢慢减小,但在训练误差和交叉验证误差之间依然有一段很大的差距。总的来说得出的结论就是,如果我们考虑增加训练集样本的容量,对于改善算法还是有一定的帮助的,因为很显然交叉验证误差再慢慢减小,那么测试集的误差也会慢慢减小,当然同样这个也能告诉我们这个算法可能存在高方差的问题。

总结

上文中一开始我们有说过几种不同的方法来改善假设函数,但往往有些人只是凭借自己的感觉来决定使用哪种方法,那么通过本文介绍的一些知识,我们可以得出,这几种方法分别对应于解决什么问题:

获取更多的训练集 --> 解决高方差问题

减少特征的数量 --> 解决高方差问题

尝试使用更多的特征 --> 解决高偏差问题

尝试使用多项式特征 --> 解决高偏差问题

增大lambda --> 解决高方差问题

减小lambda --> 解决高偏差问题

那么这里再补充一下对于神经网络的诊断:

一个相对简单的神经网络模型,隐含单元比较少或者隐藏层很少时,那么拟合时选择的参数就会比较小,容易出现欠拟合,但他的优势

拟合一个复杂的神经网络模型时,那么其参数一般比较多,容易出现过拟合,这种结构的计算量相对会很大。但过拟合问题可以使用正则化来进行修正。通常使用大型网络模型然后使用正则化来防止过拟合问题相对于使用简单的神经网络拟合的效果要更好。

总的来说,模型的复杂程度的影响有以下几点:

低阶多项式,也就是低复杂程度的模型有高偏差和低方差的问题,这种情况下,模型的拟合程度较差

高阶多项式,也就是高复杂程度的模型对于训练集的拟合效果相对较好,但对于测试集的拟合效果非常差,会出现低偏差和高方差问题。

在现实中,我们需要在两者之间选择一个合适的模型,使其能很好的来拟合数据。

以上,为吴恩达机器学习第六周Advice for Applying Machine Learning部分的笔记。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18496.html

相关文章

  • 恩达机器学习笔记-机器学习系统设计

    摘要:查准率和召回率的权衡继续讨论上述的癌症判定问题,之前我们判定分类问题时经常设定大于等于则为,反之为。机器学习数据在有大量的数据的情况下,并在某种类型的学习算法中进行训练。 确定执行的优先级 我们已经学习过一些机器学习的算法,那么如何设计一个机器学习系统呢,课程中举了一个垃圾邮件分类器的例子,例子比较简单这里就不再赘述: showImg(https://segmentfault.com/...

    weij 评论0 收藏0
  • 分享AI有道干货 | 126 篇 AI 原创文章精选(ML、DL、资源、教程)

    摘要:值得一提的是每篇文章都是我用心整理的,编者一贯坚持使用通俗形象的语言给我的读者朋友们讲解机器学习深度学习的各个知识点。今天,红色石头特此将以前所有的原创文章整理出来,组成一个比较合理完整的机器学习深度学习的学习路线图,希望能够帮助到大家。 一年多来,公众号【AI有道】已经发布了 140+ 的原创文章了。内容涉及林轩田机器学习课程笔记、吴恩达 deeplearning.ai 课程笔记、机...

    jimhs 评论0 收藏0
  • 恩达机器学习笔记-正规方程

    摘要:以上,就是关于正规方程的一些简单介绍,针对吴恩达机器学习的正规方程那一章节。 在前面的学习中,我们一直使用的线性回归算法是梯度下降法,即为了最小化代价函数$J( heta)$,我们需要通过迭代很多步来收敛到全局最小值。那么现在我们来学习一种新的解法来求解。即正规方程。正规方程提供了一种求$ heta$的解析解法,相比较迭代算法,我们可以直接一次性的求解出$ heta$的最优值。 我们首...

    fasss 评论0 收藏0
  • 重磅 | 完备 AI 学习路线,最详细资源整理!

    摘要:是你学习从入门到专家必备的学习路线和优质学习资源。的数学基础最主要是高等数学线性代数概率论与数理统计三门课程,这三门课程是本科必修的。其作为机器学习的入门和进阶资料非常适合。书籍介绍深度学习通常又被称为花书,深度学习领域最经典的畅销书。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【导读】本文由知名开源平...

    荆兆峰 评论0 收藏0
  • 恩达机器学习笔记-支持向量机

    摘要:现在,我们就开始构建支持向量机。所以学习参数就是支持向量机假设函数的形式。支持向量机会选择图中黑色的这条线来作为决策边界,相对于其他的线来看要更合理些。以上,为吴恩达机器学习第七周支持向量机的课程笔记。 优化目标 之前的课程有学习过Logistic回归的假设函数: $$ h_ heta(x) = frac{1}{1+e^{- heta^Tx}} $$ 其图像如下: showImg(ht...

    desdik 评论0 收藏0

发表评论

0条评论

songjz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<