吴恩达机器学习第10-11章
第十章
10-1 下一步决定做什么1
我们现在将重点关注的问题是,假如我们在研发一个机器学习系统或者想着试着改进一个机器学习系统的性能,我们应该如何决定,接下来应该选择哪一条道路。
我们仍然以房价预测的例子来讲解。当我们发现预测值和真实值的误差很多时,接下来应该怎么办。其中一个办法是我们可以训练更多的训练集。另外我们还可以尝试更少的特征。或者可以试图得到更多的特征。当然我们也可以采用增加多项式特征的方法,还可以增加或减少正则化参数λ。
方法很多,就意味着我们选择就相当困难,有一部分人就是凭着感觉来选择方法,最后导致浪费了时间,效果也不太好。幸运的是有一系列简单的方法,能让我们事半功倍,能让我们轻松的排除很多选择,为我们节省很多步必要的时间。在之后的章节中,我们慢慢介绍。
10-2 评估假设
当我们确定学习算法的参数时,我们考虑的是选择参数,来使训练误差最小化。但是误差过小的话,就可能导致过拟合问题。那么我们应该怎么判断一个假设是否过拟合呢?
评价假设函数的标准方法是,通常我们把我们的样本集进行分类,分为训练集和数据集。一般采用七三分。
接下来我们用线性回归算法来训练和测试我们的数据集。
首先我们需要对训练集进行学习得到参数θ,具体来讲就是最小化训练误差J(θ),这里的J(θ)是使用那70%数据来定义的,接下来我们要用测试集来测试误差,那我们要做的就是把测试集放进来,计算我们的测试误差。
如果是分类问题的话,如逻辑回归算法。来训练和测试我们的数据集,过程也是非常类似的。我们要用训练集进行学习来得到参数θ。然后用如下的方法来计算测试误差。
10-3 模型选择和训练、检测、测试集
如果您想确定对于一个数据集最合适的多项式次数,那么怎么样选用正确的特征来构造学习算法或者假如您需要选择正则化参数λ,那么我们应该怎么做。这类问题被叫做模型选择问题,我们需要讨论如何将数据分类三个数据组(训练集、验证集、测试集)
我们定义的训练误差和验证误差、测试误差如下。
我们选择交叉验证误差最小的模型来作为我们的模型。
10-4 诊断偏差和方差
当一个模型不是很理想时,那么多半是出现两种情况,要么是偏差比较大,要么是方差比较大。换句话说,要么是欠拟合问题,要么是过拟合问题。这个时候搞清楚,是偏差问题还是方差问题,或者两者都有关,这一点很重要。因为弄清楚到底是哪种情况。就能很快找到有效的方法和途径来改进算法。
我们继续沿用交叉验证误差的概念。当预测函数的项越高时,误差就会越小。而使用Jcv(θ),就会出现一个最低点,
如果一个算法没有期望中的表现那么好,例如交叉误差和测试集误差都很大,我们怎么判断此时的算法出现了高偏差的问题,还是高方差的问题。交叉验证差很大的话,是左边还是右边,如果是左边就是高偏差问题,也就是使用了过于小的多项式次数但实际上我们需要一个较高的多项式次数来拟合数据。相反右端对应的是高方差问题,也就是说多项式的次数过高了。通过下图我们可以很好的区别高方差还是高偏差。
如果你的测试误差和验证误差都很大,就有高偏差问题,
相反如果测试误差很小,验证误差很大,就有高偏差问题。
10-5 正则化和偏差、方差
这节我们输入探讨一下偏差和方差的问题,它们和算法的正则化之间的关系以及正则化是如何影响偏差和方差的。
如果λ过于太大的话,惩罚项则会非常的严重,导致θ接近于0,于是导致欠拟合,也就是高偏差。
如果λ过于太小的话,通常会出现过拟合,也就是高方差的情况。
只有当我们取合适的λ时,才能得到一条合适的曲线。
对于Jtrain和Jcv、Jtest,我们都没有假如正则化项。
一般我们的λ都时从一个很小的数字开始,然后两倍的增加。首先用代价函数取不断的优化参数,之后再用交叉验证函数取评价参数,最后选取最优的模型。
我们可以看看λ值的不同,对想训练误差还有验证误差的影响。当λ很大时,容易出现高偏差,即过拟合,当λ过小,则会出来高方差,即欠拟合。总会有一个值使训练误差和验证误差都很小。
10-6 学习曲线
绘制学习曲线非常有用,可以用来查看学习情况,或者改进算法性能。当训练样本不断的增大时,训练的误差也使再不断增大的。但测试误差会不断的变小。
当模型处于高偏差时,验证误差会从一开始很大到伴随着训练样本增加到一定程度之后就基本不会再变化了,而训练误差从一开始很小,到逐渐增大到一定程度就基本不会再改变了。所以当模型处于高偏差时,一味的增大训练样是没有益处的。
当模型处于高方差时,模型是过拟合的,到训练样本逐渐增大时,训练误差是逐渐增大的,而验证误差会从一开始一个很大的值逐渐缩小。当不断的增加训练样本时,训练误差和验证误差的差距会逐渐的减少。所以此时不断的增加训练样本对改进算法是很有帮助的。
10-7 决定接下来做什么2
我们回到第一节那提出的几个方案,应该用到什么场景中。
1.更多的训练数据可以解决高方差问题。
2.减少特征可以解决高方差问题。
3.增加特征可以解决高偏差问题。
4.增加多项式特征可以解决高偏差问题。
5.增大λ值可以解决高偏差问题。
6.减少λ值可以解决高方差问题。
第十一章
11-1 确定执行的优先级
该节只要用垃圾邮件分类系统的例子,来讲解我们在设计机器学习系统中应该考虑的事情。
11-2 误差分析
在开发机器学习应用时,通常来讲,最好的办法不是建立一个很复杂的有许多复杂特征的系统,而是通过一个简单的算法,快速去实现。
先把一个系统粗暴的做出来,然后画出学习曲线,来检测算法。最后再根据具体的问题进行改进。这样才能知道应该把时间花费在哪里,进行错误分析。
11-3 不对称分类的误差和评估
对于一些分类不是很对称的数据集,我们不能有简单的数字来评价算法的好坏,例如在癌症检测的算法中,我们有1%的错误率,但我们会发现只有0.5%的人在数据集中患有癌症,并且如果我们只判定没有患癌症,那么这样的错误了也仅仅只有0.5%,但很显然这是不对的。
有一种评估度量值叫做精确率和召回率
我们叫真实值为1,预测值也为1的样本称为真阳性,真实值为0,预测值也为0的样本称为真阴性,真实值为0,预测值也为1的样本称为假阳性,真实值为1,预测值也为0的样本称为假阴性。
精确率等于真阳性除以预测为阳性的数据。
召回率等于真阳性的数量除以阳性的数量。
11-4 精确率和召回率的平衡
当我们设定预测函数结果大于0.7被预定为1,小于0.7预定为0,则会有较高的准确率,但召回率较低。
当我们设定临界值为0.9时。这是一个搞准确率和低召回率的模型。
当我们设定临界值为0.3时。我们以非常保守的方式预测癌症,则会有很高的召回率和很低的准确率。
我们可以用一个数字来代表我们这个算法的好坏,是否既兼顾了准确率又兼顾了召回率,即下图的F1Score。