过拟合/欠拟合、偏差/方差
目录
基本概念
- 偏差:度量了学习算法的期望预测与真实结果的偏离程度, 即刻画了学习算法本身的拟合能力。
- 方差:度量了同样大小的训练集的变动所导致的学习性能的变化, 即刻画了数据扰动所造成的影响。
- 噪声:描述了在当前任务上,任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
- 经验误差:模型关于训练样本集的平均误差,也称经验风险。
- 结构风险:在经验风险的基础上加上表示模型复杂度的正则化项。
- 泛化误差:模型在新样本集(测试集)上的平均误差。 泛化误差=偏差+方差+噪声
- 欠拟合:模型的经验误差大,模型太简单,在训练的过程中基本没学到有价值的内容。
- 过拟合:模型学习了太多的训练样本的“个性”(经验误差小),但是对于未知的样本泛化能力差(泛化误差大)。
机器学习的泛化能力
机器学习是逼近目标函数的过程。
归纳性学习:从训练数据学习目标函数的学习过程。
泛化:机器学习模型学习到的模型,在学习训练时没遇到的样本上的表现。
拟合:逼近目标函数的远近程度。通过描述函数和目标函数逼近的吻合程度来描述拟合的好坏。
机器学习模型的目标: 在问题领域内,从训练数据到任意的数据上泛化性能良好。即对模型没有见过的数据进行预测。
Q:训练时,为什么考虑模型在预测新数据时的泛化性能?
S:因为已知的数据是样本,是带有噪声且不完全的。
讨论一个机器学习模型学习和泛化能力的好坏时,通常使用:过拟合和欠拟合。它们是机器学习表现不佳的两大原因。
过拟合、欠拟合
概念
- 欠拟合:模型没有很好地捕捉到数据特征,不能够很好地拟合数据。
- 过拟合:模型把训练数据学习的太彻底,以至于把噪声数据的特征也学习到了,使得模型泛化能力差。在测试时,不能够很好地识别(正确分类)新数据。
过拟合:在训练数据上表现良好,在未知数据上表现差
欠拟合:在训练数据和未知数据上表现都很差
模型复杂度的变化
- 开始时,模型往往是欠拟合的,也因此才有了优化的空间。
- 过程:不断的调整算法,使得模型的性能更好。
- 优化到了一定程度,就需要解决过拟合问题了。
与【偏差/方差】的关系
偏差
预测输出与真实标记的差别。
其中,为模型预测输出的期望,为的真实标签。
偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
可以吗?
方差
一个特定训练集训练得到的函数,与所有训练集得到的平均函数的差的平方,再取期望。
其中为在训练集上学习得到的模型在上的预测输出。
方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。表示了所有模型构建的预测函数,与真实函数的差别有多大。
方差和偏差的关系
- 低偏差低方差:是我们所追求的效果,此时预测值正中靶心(最接近真实值),且比较集中(方差小)。
- 低偏差高方差:预测值基本落在真实值周围,但很分散,此时方差较大,说明模型的稳定性不够好。
- 高偏差低方差:预测值与真实值有较大距离,但此时值很集中,方差小;模型的稳定性较好,但预测准确率不高,处于“一如既往地预测不准”的状态。
- 高偏差高方差:是我们最不想看到的结果,此时模型不仅预测不准确,而且还不稳定,每次预测的值都差别比较大。
【过/欠拟合】与【方差/偏差】的关系
- 欠拟合:训练集的预测结果就不准,偏差较大。但对于不同训练集,训练得到的模型都差不多(都不太准,对训练集不敏感),因此预测结果差别不大,方差小。因此,模型的训练性能和测试性能都会比较低。模型复杂度可能低、训练集数据量可能不够。
- 过拟合:模型完全学习训练集的信息,训练集偏差较小,测试集偏差较大。此外,模型对与训练样本分布不同的测试集上表现不一,预测结果相差大,方差大。模型复杂度高、训练集数量大。
偏差-方差折衷
一般来说,偏差与方差是冲突的,这称之为偏差-方差窘境(Bias-Variance Dilemma)。也就是说,让偏差和方差都达到最小的模型是不存在的,模型只能在偏差和方差中取折衷。
- 开始时:模型比较简单且训练不足,此时模型的拟合能力较弱(欠拟合),对训练集的扰动也不敏感,偏差主导了模型的泛化错误率。
- 随着更多参数、更多训练数据等加入到模型,模型的复杂度在提高,其拟合能力也在提升,偏差逐步下降,同时方差开始上升,但此时有可能获得偏差、方差都比较低的模型,即偏差-方差折衷后的最优模型。
- 随着模型的复杂度进一步提高,且训练程度充足后(训练数据自身的、非全局的特性很可能被模型学到),模型的拟合能力已经非常强,训练数据的轻微扰动都会导致模型发生显著变化,进而导致其预测能力时好时坏,但总体低于最优状态,此时方差主导了模型的错误率,模型过拟合。
Q:如何找到这个完美的临界点(偏差和方差的平衡点)?
S:重采样方法和验证集方法。
【解决办法】欠拟合
- 增加特征项:“组合”、“泛化”、“相关性”、“上下文特征”、“平台特征”。
- 添加多项式特征项:如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
- 减小正则化参数:正则化的目的是防止过拟合。
- 增加模型复杂度
【解决办法】过拟合
- 重新清洗数据:数据不纯导致,导致过拟合。
- 增加训练样本:训练数据占总数据的比例过小,导致过拟合。
- 正则化/增大正则项系数:L0正则、L1正则、L2正则。
- 重新做特征工程
- 增加训练样本数量
- 降低模型复杂程度
- 添加噪声数据
- 树剪枝
- Dropout:神经网络训练时,让神经元以一定的概率不工作。
- Early stoping
- 减少迭代次数
- 增大学习率
Q1:3个正则化方法。
S1:
(1)L0范数是指向量中非0的元素的个数。
(2)L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lasso regularization)。
(3)L2范数是指向量各元素的平方和然后求平方根。正则化项使得参数W变小。而更小的参数值w,意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀原理),不会过分拟合训练数据,从而不会过拟合,以提高模型的泛化能力。
Q2:L0和L1都可以实现稀疏性,为什么不用L0,而要用L1呢?
S2:L0范数很难优化求解(NP-hard)。此外,L1范数是L0范数的最优凸近似,而且它比L0范数更容易优化求解。
Q3:机器学习中一般使用L2正则。
S3:L2正则项起到使得参数w变小加剧的效果。L2范数可以使得W的每个元素都很小,都接近于0而不等于0。而L1范数是让其等于0。
此外,L2范数有助于处理 condition number不好的情况下,矩阵求逆很困难的问题(?)。
参考
https://blog.****.net/hurry0808/article/details/78148756
https://www.cnblogs.com/huangyc/p/9686107.html
https://blog.****.net/willduan1/article/details/53070777
https://www.cnblogs.com/nxld/p/6058782.html