【机器学习深度学习】教程——偏差方差,欠拟合过拟合
本系列文章由@ 努力学挖掘机的李某某出品,转载请注明出处。
文章链接:http://blog.****.net/qq_30911665
虽然读研期间做的内容和机器学习相关,但是17年秋招时发现自己对于机器学习深度学习的理解不够深入,而自己在学习的过程中发现,通过分享讲解知识的方式更有助于自己对于知识的巩固和了解,于是萌生了写一个教程的想法。本文尽量采取简单易懂的方式叙述,顺便重新学习一下整个知识体系,希望自己的一点拙见能对后来者有所帮助。
本系列文章主要参考的内容是台湾大学李宏毅老师的机器学习视频 和吴恩达老师的deeplearning.ai课程 。本文在写作的过程中加入了很多个人的理解,如果有错误之处,还望指正。
前言
上一篇我们介绍了:
* 我们了解了学习率是很重要的超参数,反映了参数更新的步长。
* 我们了解了随机梯度下降和批梯度下降,它们使得参数更新的方向有了随机性,可以避免陷入梯度为0但是不是最优解的点。
* 我们了解了为什么要使用特征归一化,特征归一化对于使用梯度下降法的算法来说是为什么很重要的。
这一篇我们就是介绍机器学习中误差的来源——模型的偏差与方差
偏差与方差的直观理解
我们首先从直观上来理解一下这两个词:
* 偏差
直观上我们感觉偏差就是预测值与真实值的偏离程度
* 方差
大家在统计学中应该都学过,方差通差是反映随机变量在期望值附近的波动程度
我们假设对于一个随机样本,模型的期望为,方差为,那么对于N个样本,我们假设,,也就是随着样本的增大,方差减小,因此,方差和样本的数量成反比。
方差偏差和误差的关系
如图所示
图中红色靶心表示真实的模型,蓝色的小点表示经过一批数据计算得到的模型。蓝色的大点表示经过无数批数据计算得到的模型的平均,即模型的期望,而偏差就是模型的期望与目标模型的误差,方差就是一批数据得到的模型相对于模型的期望的波动。这样说可能还不太理解,我们换一个角度来说明这个问题。假设现在对于一个回归预测任务,我们要得到一个模型与哪些因素有关呢?
* 模型集合
我们选择用神经网络还是决策树或者多项式回归显然得到的模型会不同,即使同样用多项式回归,我们选择多项式的次数不同,得到的模型也显然不同。
* 优化策略
使用不同的损失函数,使用不同的优化方法,甚至我们如果用批梯度下降,batch的大小和学习率的大小也会影响最终的模型。
* 数据
不同的数据也会得到不同的模型。
方差是反映随机变量在期望值附近的波动程度,这种波动是受到数据的影响的,因此方差是反映数据的波动对于模型的影响。而偏差是反映我们模型集合的选取和优化策略的好坏。
欠拟合与过拟合
我们看下图:
如果我们选择的模型集合如蓝圈所示,我们的模型集合都没有覆盖目标集合,如左图,那么显然偏差很大,而右图则具有较小的偏差。这种情况我们称为欠拟合,也就是说我们的模型选择范围无法包含目标模型,反映到数据上就是我们的模型不能较好地拟合我们的训练数据。
那么模型完全拟合了训练数据就说明模型很好吗?答案是否定的,因为我们的目标是让模型能较好地预测未见过的数据。模型完全拟合了训练数据,有可能是学习到了一些噪声,那么对于未见过的数据,它的预测效果就会不好,因为它的方差很大,而方差是反映数据的波动对于模型的影响,换言之,它在训练集上表现很好,但是因为学到了很多噪声,所以换个数据集,效果就不行了。这就是过拟合。表现在试验中就是我们的模型在训练集表现很好,在测试集表现很差。
偏差方差与模型复杂度的关系
通常来说,模型越复杂,偏差越小,方差越大。因为模型越复杂,学习能力越强,能更好地拟合训练数据,但是也更有可能学到噪声,模型越简单,学习能力越弱,很难较好地拟合训练数据,但是因为模型简单,不太容易受到数据的影响。
也许“模型简单,不太容易受到数据的影响。”不太容易理解,我们举个例子,假设我们取一个最简单的模型,那么无论训练数据是什么,我们得到的都是一个固定的模型,方差就是0.
怎么评估模型误差和减小偏差方差
我们得到了一个模型,如何判断它好或者不好呢?因为我们的目标是让模型能较好地预测未见过的数据,我们直觉上可以如下操作:
看验证集Validation Set的损失大小,但是更好的策略是采用交叉验证,如下图所示:
我们知道如果在训练集Training Set上表现不佳,那么属于偏差过大,欠拟合,怎么解决呢?
由于欠拟合通常是因为模型的学习能力不够,我们可以选择如下策略:
* 挖掘更多的特征,增加输入的特征空间维度
* 选择更复杂的模型,比如从线性模型改为非线性模型,神经网络模型可以选择增加神经元个数,决策树模型可以增加树的深度等等
我们知道如果在训练集Training Set上表现较好,在测试集表现很差,那么属于方差过大,过拟合,怎么解决呢?
由于过拟合通常是因为模型学习能力过强,学到了不少噪声,我们可以选择如下策略:
* 收集更多的数据,,数据越多方差越小
* 降低模型的复杂度,决策树模型可以减小树的深度,但是神经网络模型通常不会采用减小神经元个数的方法,而是使用正则化,这个内容过多,我们之后再专门讲解吧。
回顾一下, 这篇博客主要讲了什么是偏差和方差,欠拟合和过拟合,主要内容有:
1.我们了解了偏差就是模型的期望与目标模型的误差,方差就是一批数据得到的模型相对于模型的期望的波动。
2.我们了解了偏差过大会导致欠拟合,方差过大会导致过拟合,模型越复杂,偏差越小,方差越大。
3.我们了解了挖掘更多的特征,增加输入的特征空间维度,选择更复杂的模型可以减小偏差,防止欠拟合;收集更多的数据,正则化可以减小方差,防止过拟合 。
希望这篇博客能对大家有所帮助。