欠拟合(underfitting)和过拟合(overfitting)

机器学习的目标是获得泛化能力强的模型,泛化能力用泛化误差(在实际应用场景中的误差)来度量,而泛化误差是用测试误差(测试集上的误差)来估计的.模型学习的过程一般是最小化训练误差.训练误差一般小于测试误差.

所以好的模型具有以下特点:

  1. 训练误差小
  2. 测试误差和训练误差差别小

第一点做不到,也就是训练误差大,称为欠拟合;第二点做不到,也就是测试误差远大于训练误差,称为过拟合.

欠拟合

欠拟合的原因

欠拟合一般是因为

  1. 模型选择不好,模型的表达容量(representational capacity)不强,比如原本数据是五次多项式,假设空间(模型对应的函数族的空间)却是线性空间.
  2. 参数估计不好,也就是优化不好,造成模型的实际容量(effective capacity)不足.

欠拟合的识别

欠拟合比较好识别,从定义出发,当训练误差比较大时,就是欠拟合了.

欠拟合的处理

面对欠拟合时,思路大体上分为

  • 从数据上提升性能
  • 从算法上提升性能
  • 从模型融合上提升性能

从数据上提升性能

  1. 处理数据使得数据符合模型假设
  2. 寻找有意义的特征,特征工程是机器学习过程中特别重要的一环
  3. 扩大样本集,当然,不是所有的模型都可以通过扩大样本集来提升性能

从模型选择和优化上提升性能

  1. 选取更加接近实际分布的模型
  2. 选取好的优化方法,以学习到更优的参数
  3. 选取好的超参数

从模型融合上提升性能

使用ensemble方法来提高泛化水平的能力

过拟合(overfitting)

过拟合的原因

过拟合的原因一般有:

  1. 样本量不够而模型容量过大.比如10个训练样本训练出一个完美的十次多项式,但实际分布是个二次多项式.
  2. 训练集和测试集的分布存在差异.比如手写数字识别任务中,训练集全是正着的字,而测试集中存在上下颠倒的字.

识别过拟合

要识别过拟合可以通过以下指标:

  • 训练集上准确度远高于验证集上准确度
  • 训练集上准确度还在上升但验证集上准确度已经不再上升或者已经下降了.

学习曲线是个很好的工具.学习曲线表现了不同样本量下的训练误差和测试误差.

处理过拟合

处理过拟合大体上有这么几种思路:

  • 从数据上提升性能
  • 从算法上提升性能
  • 从模型融合上提升性能

从数据上提升性能

  1. 使用数据增强额外的产生新数据用于训练

从算法上提升性能

  1. 通过为一些训练数据设置权重以避免一些特殊点对算法的影响
  2. 选取合适的停止训练标准,使对机器的训练在合适的程度.
  3. 模型中加入正则项或神经网络中可以增加dropout层随机滤掉一些权重变化,以限制模型实际容量.
  4. 精心挑选权重的初始化的分布

从模型融合上提升性能

使用投票,bagging通过组合几个基础分类器的结果投票实现提高泛化水平的能力