机器学习高方差和高偏差问题

版权声明:本文为博主原创文章,如要转载请在转载的文章后附上本人博客链接! https://blog.csdn.net/syyyy712/article/details/79960726

在讲模型高方差和高偏差问题前,先聊聊数据集分配和模型选择。为了使得模型具有更好的泛化能力,我们在数据集分配问题上采用了6:2:2的分配原则,60%作为训练集,20%作为交叉验证集,20%作为测试集。当选择模型时用训练集训练得到模型的一组权重,将这组权重带入到模型中,并用交叉验证集求出损失值,选取损失值最小的那一个模型,最后就可用从未和模型拟合过的测试集计算学习算法误差。

接下来我们一起探讨一下模型的高偏差和高方差问题。

如上图是吴恩达课程中的一组图片,第一幅图是模型出现了高偏差(欠拟合),第二幅图是最佳的模型,第三幅图模型出现了高方差(过拟合),机器学中的欠拟合和过拟合对模型的精度都没有帮助,因此归纳一下可以从一下几个方面解决过拟合和欠拟合问题:

当模型出现高偏差时:

  • 增加特征种类

  • 增加多项式的次数

  • 降低lamda值(正则化项的系数)

当模型出现高方差时:

  • 增加数据集

  • 剔除一部分特征(dropout)

  • 增加lamda值(正则化项的系数)


当了解了高偏差和高方差的含义以及解决方式,接下来如何判断模型处于高方差还是处于高偏差,以及这两种情况能有效的指导更好的改善模型,这就需要学习曲线的帮助。
这里写图片描述

从上述这幅图中可以看到,横坐标是多项式的次数,纵坐标是误差,可以看出粉红色线为训练误差随着多项式次数的增加越来越小,大红色线为交叉验证集误差曲线,类似于二次函数曲线,在曲线图左边,训练集误差和验证集误差均很大,说明训练集和验证集均拟合的不是很佳,因此处于欠拟合状态即(高偏差),在最右边,训练集拟合的很好,但是验证集误差很大,说明模型的泛化能力很差,只认识看到过的数据集,不认识没看到的数据集说明处于模型处于高方差问题。因此通过该条曲线可以大概选择出最佳的多项式次数。


在上述解决办法中提到了修改lamda值可以解决高偏差高方差问题,下图即是lamda值和两者之间的关系,

这里写图片描述

在实际的cost function函数中是没有正则化项,但是为了防止过拟合而加入了正则化项,目的是降低多项式中的权重(见以下两个公式),以使得模型变得简单,
这里写图片描述
这里写图片描述

因此对于lamda越大针对训练集拟合的越差因此训练集误差会上升,而验证集一开始下降后来上升,lamda越大会使得模型变得简单容易出现欠拟合,lamda越小会使得模型出现过拟合,因此对于高偏差可以降低lamda值使模型变得复杂,对于高方差可以增加lamda值使模型每一项权重降低从而变得简单。


最后一组曲线是数据集的大小对高偏差和高方差的影响:
这里写图片描述

随着数据集的增加,模型的拟合越来越困难,因此训练集误差会有所上升,而对于验证集,随着数据的增加,模型的泛化能力越来越强,验证集误差会有所下降。但是验证集误差值不会低于训练集,因为训练集是模型能见到的数据,而验证集对模型来说是新数据。

这里写图片描述

对于高偏差问题,说明模型存在欠拟合,当数据集增加的时候训练集误差一定会上升,因为模型欠拟合,数据集增多,模型还是拟合很困难,但是在改善,因此验证集会有所下降,但是最后的误差都会很大,而且训练集误差和验证集误差会很相近并且数值很大,因此对于高偏差增加数据集会徒劳无用。

这里写图片描述

针对高方差问题,模型对于训练集拟合的很好,但是泛化能力太差,因此验证集和训练集的误差值会增加,但是随着数据集的增加,模型越来越困难拟合每一个点,提高一定的泛化能力,最后会使得验证集和训练集误差慢慢接近,因此针对高方差问题可以增加数据集提高模型泛化能力。


因此通过学习曲线可以有效指导我们正确改善模型性能的方向,大大节约时间。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页