您的位置:首页 > 其它

机器学习笔记(十) 应用机器学习的建议

2017-12-17 21:36 337 查看
1.决定下一步

   以预测房价为例,假如我们已经完成了正则化线性回归,在得到学习参数之后,将假设函数放到新的样本上测试,却发现产生非常大的误差。现在我们的问题是改进这个算法,该怎么做?

   我们可以想出很多种方法解决问题,有一种办法是使用更多的训练样本,或者说使用更少的特征。但是我们并不知道效果如何,有可能一直在做无用功。我们接下来所要讲的,就是在这些方法中学会选择,这样才能让我们事半功倍。

   列出我们可以选择的方法:

   (1)获得更多的训练实例;

   (2)减少特征的数量;

   (3)获得更多的特征;

   (4)增加多项式特征;

   (5)减少正则化程度λ;

   (6)增加正则化程度λ;

   想要改进我们的算法,不能直接从上面随机选择,而是使用机器学习诊断法帮助我们评估和选择。我们在下面依次介绍。

2.评估假设

   

     


   当我们确定学习算法的参数的时候,我们考虑的是选择参量使误差最小化。但是,仅仅因为假设具有很小的训练误差,我们不能判断它是一个好的假设函数,因为我们以前学习过过拟合的问题。

   那么怎么判断是否出现过拟合?画图太麻烦,显然我们需要另一种办法。

   为了检验算法是否过拟合,我们把数据分为训练集和测试集。通常情况下用70%的数据作为训练集,剩下的30%作为测试集(这里的分配要保证随机)。

   


   在通过训练集让我们的模型学习到参数后,对测试集运用该模型,我们有两种方式计算误差:

   对于线性回归模型,我们用测试集数据计算代价函数;

   对于逻辑回归模型,除了用测试集数据计算代价函数外,额外再增加一个错误分类的error。

   


   

3.模型训练和交叉验证集

   假如我们要在10个不同次数的二项式模型之间进行选择:

   


   显然次数越高,多项式模型越能适应我们的训练数据集,但是适应训练集并不代表能推广至一般情况,我们应该选择一个更能适应一般情况的模型。所以这里提出交叉验证集来帮助选择模型。

   60%的数据作为训练集,20%的数据作为交叉验证集,20%的数据作为测试集。

   


   模型选择的方法为:

   (1)使用训练集训练出10个模型;

   (2)用10个模型分别对交叉验证集计算得到交叉验证误差(代价函数的值);

   (3)选取代价函数值最小的模型;

   (4)对第3步选出的模型对测试集计算得到推广误差(代价函数的值);

   


4.判断偏差与方差

   当我们运行我们的学习算法时,出现误差,表现不理想,一般来说都是因为两个原因,一是偏差较大,一是方差较大(即欠拟合和过拟合)。

   


   我们分别计算模型的训练误差和交叉验证误差:

   


   将函数图绘制在同一张图上:

   


   对于训练集,d较小时,误差大,模型拟合度很低;随着d的增大,误差减小,拟合度增加。

   对于交叉验证集,d较小时,误差大,拟合度低;随着d的增长,误差先减小,再增大。

   如果我们的交叉验证集误差较大,怎么判断是高偏差还是高方差?

   


   由上图可知,训练集误差与交叉验证集误差近似时,高偏差,即欠拟合;交叉验证集误差远大于训练集误差时,高方差,即过拟合。

5.正则化和偏差/方差

   我们在训练模型的过程中,会使用正则化来防止过拟合,但是正则化的程度我们不好确定,有可能过高或者过低。

   


   我们选择一系列想要测试的λ值,通常是0-10之间以2的倍数增长的值(0、0.01、0.02、0.04、0.08、0.16、0.32、0.64、1.28、2.56、5.12、10)。同样把数据分为训练集、测试集、交叉验证集。

   


   选择λ的方法:

   (1)使用训练集训练出12个不同正则化程度的模型;

   (2)用12个模型分别对交叉验证集计算得到交叉验证误差;

   (3)选择得出交叉验证误差最小的模型;

   (4)运用第3步选出的模型对测试集计算得到推广误差;

   将训练集与交叉验证集模型的代价函数误差与λ值绘制在同一张图上:

   


   λ值较小时,训练集误差较小,交叉验证集误差较大;

   随着λ值增大,训练集误差增大,交叉训练集误差先减小后增大。

   

6.学习曲线

   学习曲线是学习算法的一个很好的合理检验。学习曲线是将训练集误差和交叉验证集误差以训练集实例数量(m)为函数所绘制的图像。

   


   我们考虑下训练样本数目和模型之间的关系。以二次多项式回归为例,如果只有一个训练样本,模型很容易和样本点拟合,训练集误差近似为0,验证集误差可能会很大;如果有两个样本点,模型也很容易拟合,训练集误差略大一点,验证集误差可能会小一点;当样本点逐渐变多时,模型不能很好的拟合,训练集误差会更大,验证集误差更小。

   

  

   绘出学习曲线图:

   


   怎么利用学习曲线分辨高偏差(欠拟合):

   我们用一条直线来适应数据:

   

  

   由上图可知,无论我们增加多少训练样本,模型拟合依然不够,误差不会有太大的变化。下面是高偏差(欠拟合)的学习曲线图:

   


   总的来说,高偏差的学习算法,它的训练误差和验证集误差在一定的训练样本数目之后都很高,而且不会随着样本数目的增大而改变,所以在高偏差(欠拟合)的情况下,增加数据到训练集不一定能有帮助。

   怎么利用学习曲线分辨高方差(过拟合):

   假设我们使用一个非常高次的多项式模型,并且正则化非常小:

   


   当交叉验证集误差大于训练集误差,增加更多的数据可以很好提高效果。

   高方差(过拟合)的学习曲线:

   


   总的来说,如果一个学习算法是高方差的,那么它的训练误差和验证集误差在一定的训练样本数目之后虽然有差异,但是随着样本数目的增大而减小。所以对于高方差(过拟合)问题,增加训练样本数目是解决方法之一。

7.再次决定下一步

   我们回顾第一节里说到的六种选择:

   (1)获得更多的训练实例----解决高方差;

   (2)减少特征的数量----解决高方差;

   (3)获得更多的特征----解决高偏差;

   (4)增加多项式特征----解决高偏差;

   (5)减少正则化程度λ----解决高偏差;

   (6)增加正则化程度λ----解决高方差;

   神经网络的偏差和方差:

   


   使用较小的神经网络,类似于参数较小的情况,容易导致高偏差(欠拟合),计算代价较小;使用较大的神经网络,类似于参数较大的情况,容易导致高方差(过拟合),计算代价较大,但是可以通过正则化手段来调整更适应数据。

   通常选择较大的神经网络并采用正则化处理会比直接采用较小的神经网络效果要好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐