Machine Learning - Coursera week6 Bias vs Variance

版权声明:本文为博主siucaan原创文章,转载请注明出处。 https://blog.csdn.net/qq_23869697/article/details/81454432

Bias vs Variance

1.Diagnosing bias vs variance

有关偏差和方差的问题,也就是欠拟合与过拟合的问题。能够判断一个算法是偏差还是方差有问题对于如何改进学习算法的效果非常重要。下面看一个常见的欠拟合与过拟合的例子。

对训练集数据进行预测或对验证集数据进行预测产生的平均平方误差来衡量模型的好坏。

左边的模型只使用了阶数为1的线性函数去拟合数据,明显欠拟合;而右边的图使用了更高阶的函数拟合数据,明显出现了过拟合。中间的图表示训练集的平均平方误差随着多项式阶数的提高而减小,可能在阶数大于2的时候,已经出现过拟合。所以验证集在阶数为2之后,并没有随着阶数的增加而进一步减小,反而增加。这就是以为模型太好地拟合了训练集的数据,把原本个体的一些特征也学习了。

如何区分偏差和方差?看下面的图:

算法处高偏差的情况时,训练集误差会很大,因为你的假设
不能很好地拟合训练集数据;而当你处于高方差的问题时,你的训练误差通常都会很小并且远远小于交叉验证误差。

2. Regularization and Bias/Variance

使用正则项解决过拟合问题时,有一个参数 λ 需要确定。第一种情形是正则化参数λ取一个比较大的值比如λ的值取为10000甚至更大。在这种情况下 所有这些参数θ1,θ2,θ3等等将被大大惩罚,其结果是这些参数的值将近似等于0。 另一种情况是λ值很小,比如 λ的值等于0。在这种情况下,通常会处于过拟合(overfitting)的情况。

自动选取正则化参数λ
从0.01 0.02 0.04开始一直试下去,通常我会将步长设为2倍速度增长,直到一个比较大的值。

每选择一个参数λ,接着训练模型,最小化我们的代价函数,最后用用交叉验证集来评价这些假设和参数。选择验证集误差最小的模型和参数,最后使用测试集估计模型的泛化能力。

训练误差与验证误差随着lambda如何变化?
如果正则化项参数lambda的值很小,那也就是说我们几乎没有使用正则化,因很大可能处于过拟合,即高方差的问题;
如果lambda的值取的很大的时候,我们很有可能处于高偏差的问题;
所以当lambda值很小时能得到一个值很小的Jtrain,而如果lambda的值很大时,模型不能对训练集很好地拟合,因此你的误差值很大。 因此,当lambda增大时,训练集误差的值会趋于上升。

3. Learning Curves

这一节学习如何使用学习曲线来检查算法是否正常。训练集和验证集的曲线是平均误差关于训练样本的曲线。如下图,训练样本只有一个,误差一定为0;如果有两组训练样本,二次函数也能很好地拟合。如果我用三组训练样本,依然能很好地用二次函数拟合。

可以看到当训练样本容量m很小的时候,训练误差也会很小。因为训练集很小,很容易就能把训练集拟合到很好。当m等于4的时候,二次函数似乎也能对数据拟合得很好。当m等于5的情况再用二次函数来拟合,好像效果有下降但还是差强人意。
不难发现,当训练样本很少的时候,对每一个训练样本都能很容易地拟合到很好,所以训练误差将会很小。当m的值逐渐增大,想对每一个训练样本都拟合到很好 就显得愈发的困难了。因此训练集误差就会越来越大。 那么交叉验证集误差的情况如何呢? 交叉验证集误差是对完全陌生的交叉验证集数据进行预测得到的误差。当训练集很小的时候泛化程度不会很好,不能很好地适应新样本。只有当使用一个更大的训练集时才有可能得到一个能够更好拟合数据的模型。因此,你的验证集误差和测试集误差都会随着训练集样本容量m的增加而减小。

高偏差的情况
用一条直线来拟合数据的例子,很显然一条直线不能很好地拟合。随着样本的增大,训练误差会增大,但是训练得到的模型泛化能力得到提高,所以验证集的误差会下降。当数据大到一定的程度时,交叉验证集误差和测试集误差就趋于不变。这样你会得到最能拟合数据的那条直线。

高方差的情况
训练集样本容量很小,用很高阶次的多项式来拟合,会出现高方差的情况。

数据很少时能够极好地拟合,当数据增大时,拟合的程度变得不那么好。训练误差开始增大,但总的来说还是很小。而验证集的情况,因为一开始模型过拟合了训练数据,所以交叉验证集的误差很大。算法处于高方差情形最明显的一个特点是在训练集误差和交叉验证集误差之间有一段很大的差距。从这幅图中我们基本可以预测如果继续增大训练样本的数量,曲线将向右延伸,交叉验证集的误差将会逐渐下降。所以在高方差的情形中使用更多的训练集数据对改进算法的表现事实上是有效果的。

小结:

4. Deciding What to Do Next Revisited

通过上面的分析,我们能够找到发生高偏差和高方差发生的原因,可以对症下药。

使用神经网络时,一个简单的神经网络参数就不会很多,很容易出现欠拟合。相对较大型的神经网络结构,要么隐藏层单元比较多,要么隐藏层比较多。神经网络参数一般较多,容易出现过拟合。

究竟要选择一个隐藏层还是多个隐藏层?
默认的情况是使用一个隐藏层。但是也可以选择多个隐藏层。把数据分割为训练集,验证集,和测试集。然后使用交叉验证的方法比较一个隐藏层的神经网络,然后试试两个、三个隐藏层,以此类推。看看哪个神经网络在交叉验证集上表现得最理想,最后选出你认为最好的神经网络结构。

小结:

猜你喜欢

转载自blog.csdn.net/qq_23869697/article/details/81454432