过拟合/欠拟合、偏差/方差

基本概念

  • 偏差:度量了学习算法的期望预测与真实结果的偏离程度, 即刻画了学习算法本身的拟合能力
  • 方差:度量了同样大小的训练集的变动所导致的学习性能的变化, 即刻画了数据扰动所造成的影响
  • 噪声:描述了在当前任务上,任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度
  • 经验误差:模型关于训练样本集的平均误差,也称经验风险。
  • 结构风险:在经验风险的基础上加上表示模型复杂度的正则化项
  • 泛化误差:模型在新样本集(测试集)上的平均误差。 泛化误差=偏差+方差+噪声
  • 欠拟合:模型的经验误差大,模型太简单,在训练的过程中基本没学到有价值的内容。
  • 过拟合:模型学习了太多的训练样本的“个性”(经验误差小),但是对于未知的样本泛化能力差(泛化误差大)。

机器学习的泛化能力

机器学习是逼近目标函数Y=f(X)Y=f(X)的过程。

归纳性学习:从训练数据学习目标函数的学习过程。
泛化:机器学习模型学习到的模型,在学习训练时没遇到的样本上的表现。
拟合:逼近目标函数的远近程度。通过描述函数和目标函数逼近的吻合程度来描述拟合的好坏。

机器学习模型的目标: 在问题领域内,从训练数据到任意的数据上泛化性能良好。即对模型没有见过的数据进行预测。

Q:训练时,为什么考虑模型在预测新数据时的泛化性能?
S:因为已知的数据是样本,是带有噪声且不完全的。

 讨论一个机器学习模型学习和泛化能力的好坏时,通常使用:过拟合和欠拟合。它们是机器学习表现不佳的两大原因。

过拟合、欠拟合

概念

  • 欠拟合:模型没有很好地捕捉到数据特征,不能够很好地拟合数据。
  • 过拟合:模型把训练数据学习的太彻底,以至于把噪声数据的特征也学习到了,使得模型泛化能力差。在测试时,不能够很好地识别(正确分类)新数据。

过拟合:在训练数据上表现良好,在未知数据上表现差
欠拟合:在训练数据和未知数据上表现都很差

过拟合/欠拟合、偏差/方差

模型复杂度\uarr的变化

  • 开始时,模型往往是欠拟合的,也因此才有了优化的空间。
  • 过程:不断的调整算法,使得模型的性能更好。
  • 优化到了一定程度,就需要解决过拟合问题了。
    过拟合/欠拟合、偏差/方差

与【偏差/方差】的关系

偏差

 预测输出与真实标记的差别。
bias2(X)=(f(X)y)2bias^2(X)=(\overline f(X)-y)^2
 其中,f(X)\overline f(X)为模型预测输出的期望,yyXX的真实标签。
 偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。

bias2(X)=(ypredytrue)2bias^2(X)=(y_{pred}-y_{true})^2可以吗?

方差

 一个特定训练集训练得到的函数,与所有训练集得到的平均函数的差的平方,再取期望。
var(X)=E[(f(X;D)f(X))2]var(X)=E[(f(X;D)-\overline f(X))^2]
 其中f(X;D)f(X;D)为在训练集DD上学习得到的模型ffXX上的预测输出。
 方差度量了同样大小的训练集的变动导致的学习性能的变化,即刻画了数据扰动所造成的影响。表示了所有模型构建的预测函数,与真实函数的差别有多大。

方差和偏差的关系

过拟合/欠拟合、偏差/方差

  • 低偏差低方差:是我们所追求的效果,此时预测值正中靶心(最接近真实值),且比较集中(方差小)。
  • 低偏差高方差:预测值基本落在真实值周围,但很分散,此时方差较大,说明模型的稳定性不够好。
  • 高偏差低方差:预测值与真实值有较大距离,但此时值很集中,方差小;模型的稳定性较好,但预测准确率不高,处于“一如既往地预测不准”的状态。
  • 高偏差高方差:是我们最不想看到的结果,此时模型不仅预测不准确,而且还不稳定,每次预测的值都差别比较大。

【过/欠拟合】与【方差/偏差】的关系

过拟合/欠拟合、偏差/方差

  • 欠拟合:训练集的预测结果就不准,偏差较大。但对于不同训练集,训练得到的模型都差不多(都不太准,对训练集不敏感),因此预测结果差别不大,方差小。因此,模型的训练性能和测试性能都会比较低。模型复杂度可能低、训练集数据量可能不够。
  • 过拟合:模型完全学习训练集的信息,训练集偏差较小,测试集偏差较大。此外,模型对与训练样本分布不同的测试集上表现不一,预测结果相差大,方差大。模型复杂度高、训练集数量大。
    过拟合/欠拟合、偏差/方差

偏差-方差折衷

 一般来说,偏差与方差是冲突的,这称之为偏差-方差窘境(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.csdn.net/hurry0808/article/details/78148756
https://www.cnblogs.com/huangyc/p/9686107.html
https://blog.csdn.net/willduan1/article/details/53070777
https://www.cnblogs.com/nxld/p/6058782.html