当我们使用机器学习算法解决实际问题时,可能在得到学习参数后,输入新的数据后效果不是很理想。即运用训练好了的模型来预测未知数据时发现了较大的误差。那么我们可以采用下面的方法来提高机器学习算法的性能。
1.获取更多的训练样本
2. 尝试减少特征的数量
3.尝试获的更多的特征
4. 尝试增加多项式特征
5.尝试减少正则化程度
5.尝试增加正则化程度
我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。“诊断法”的意思是:这是一种测试法,你通过执行这种测试,能够深入了解某种算法到底是否有用。
当我们确定学习算法的参数时,通常是通过选择参量来使训练误差(代价函数)最小化.代价函数最小并不代表这个已经训练好的学习算法非常的好,因为可能过拟合。该情况如下所示
为了检验算法是否过拟合,我们将数据集分为训练集和测试集,通常使用70%的数据作为训练集,用剩下30%的数据作为测试集。训练集和测试集均需要含有各种类型的数据,通常要先对数据进行洗牌,然后再分为训练集和测试集,如下所示
在通过测试集学习具体的参数后,对测试集运用该模型计算误差,如下所示
1 对于线性回归模型,利用测试集数据计算代价函数。
2对于逻辑回归模型,可以利用测试数据集来计算代价函数
假设我们要在10个不同次数的二次项模型之间选择:
1.
2.
3.
10.
虽然越高次数的多项式模型越能够很好的适应我们的训练数据集,但是适应训练数据集并不代表能推广至一般情况,为了防止过拟合,我们需要使用交叉验证集来帮助选择具体的模型。通常我们是使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集。如下图所示
一般选择模型的方法为:
1. 使用训练集训练出10个模型(假设为10个模型)
2. 用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
3. 选取代价函数值最小的模型
4. 用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)
当运行一个学习算法时,如果算法表现的不理想,那么多半出现两种情况:要么偏差比较大或者是方差比较大。换句话讲就是要么是欠拟合,要么是过拟合。这两种情况如下所示
我们判断是偏差还是方法主要是将训练集的代价函数与交叉验证的代价函数进行比较,总结如下所示:
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合
之前训练模型中,一般会使用正则化方法来防止过拟合,但是由于不知道正则化的参数选择大小,有可能正则化程度太高或者太小,即在选择时也要考虑多项式的问题。 我们选择一系列的想要测试的 λ 值,通常是 0-10之间的呈现2倍关系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10 共12个)。我们同样把数据分为训练集、交叉验证集和测试集。
选择λ 的方法为:
1.使用训练集训练出12个不同程度正则化的模型
2.用12个模型分别对交叉验证集计算的出交叉验证误差
3.选择得出交叉验证误差最小的模型
4.运用步骤3中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上:
当 λ 较小时,训练集误差较小(过拟合)而交叉验证集误差较大。随着 λ 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加。
总之来讲,评价学习算法的效果要采用与训练集不同的数据集进行评估,如果学习算法对训练数据适应的过好,可能会产生过你拟合的问题,因此我们要注意多项式的选择与正则化参数的选择。当我们通过测试数据集知道过拟合或者是欠拟合时可以采用之前上述的措施,但是要依据情况不同而进行选择
1.获取更多的训练实例——解决高方差
2.尝试减少特征的数量——解决高方差
3.尝试获得更多的特征——解决高偏差
4.尝试增加多项式特征——解决高偏差
5.尝试减少正则化程度λ——解决高偏差
6.尝试增加正则化程度λ——解决高方差