机器学习基础-过拟合&欠拟合

对于一个模型,我们有许多指标对其泛化能力进行评测,其中有两个指标是亘古不变的,那就是欠拟合UNDERFITTING和过拟合OVERFITTING

1. 欠拟合

  • 在训练集上通过机器学习算法模型对其进行拟合,但是效果并不好,损失函数loss值很大,如果训练集效果不好,那测试集的效果自然就不言而知。例如说:我想让机器通过照片的识别猫。如果机器的学习模型比较low,复杂度比较低,有很多特征没学到,像猫的耳朵,猫的毛发等等。那么其在训练集的效果自然就很差。
    2.过拟合
  • 而对于过拟合,在训练集上的表现和欠拟合刚好相反,所有数据拟合的效果都非常好,然而在测试集上(一堆没见过的数据集),其表现却不尽人意。又拿上面猫的例子来讲,如果在训练集上,一个很复杂的模型,将猫的所有特征都学的明明白白,所有特征都学得透透彻彻,就连猫的颜色都学进去(譬如这里的猫都是黑色系的),当在测试集上出现了一只白猫,其预测的效果就会大打折扣。

除此之外,还得提到两个和欠(过)拟合相关联的两个指标,偏差bias和方差variance.

  • bias偏差刻画的是算法本身的性能,高偏差将会造成欠拟合。换句话说,模型越复杂偏差就越小;而模型越简单,偏差就越大。
  • 方差用来衡量因训练集数据波动(fluctuations)而造成的误差影响。高方差将会造成过拟合
  • 对于监督学习,如果能将模型的方差与误差权衡好,那么可以认为该模型的泛化性能(对于新数据)将会表现出好的结果。
    机器学习基础-过拟合&欠拟合_第1张图片
    那么通过了解欠(过)拟合,我们需要探究一下它们产生的原因:
    过拟合
  • 如果训练的数据量占总体数据量过少,模型在训练集上能很好地学习和拟合数据的分布,但是当遇到新的数据分布时,模型就会乱了阵脚,发现自己学到东西远远不够面对新的挑战,表现会比训练集差了不少,产生过拟合。
  • 如果模型过于复杂,为了拟合训练集的数据分布,就会产生在训练集上表现很好,在测试集上表现很差。
  • 采样不均衡,训练集的label分布和测试集的label不一样,模型只能学习到训练集的采样分布,那么同样遇到新的数据分布(测试集),就会表现得很差。比如,训练集有10000张猫的照片,500张狗的照片喂给机器建模,当机器训练出来的模型去预测一张狗的照片时,反而大概率会认成猫。
  • 异常值也会导致过拟合的产生,如果在训练集或是测试集的异常值没有得到处理。如果在训练集中存在异常值,那么这类数据就会成为噪点并被模型学习,会干扰到测试集上的发挥;如果在测试集存在异常值,当模型训练好并进行预测时,异常数据点也会影响到模型的发挥。
  • 前面是从数据的角度考虑过拟合的产生,如果从模型的角度考虑,那就是少了一个正则化项的参数,正则化是对模型的复杂度做一个惩罚,制约模型中各个参数的权重,通过限制w权重的大小或者个数,来使得loss函数变小,防止过拟合。

欠拟合

  • 与过拟合相反,如果训练数据量过多,机器没法很好地学习到数据的分布,自然在训练集上表现就会差。
  • 模型过于简单,没法很好地拟合数据的分布,bias增加,产生过拟合。
  • 数据过于集中,模型没法兼顾到每一个点的分布,产生过拟合。

如果模型产生了欠(过)拟合,那么怎样才能权衡好这类问题?

  • 降低过拟合的方法:
    1.在损失函数采用正则化项,降低各参数的权重对模型的影响。
    2.增大训练集的数据量,使得模型兼顾到更多数据的分布。
    3.降低模型的复杂度,这里有点类似奥卡姆剃刀原理,若无必要,勿增实体,简单的模型易于对未知的数据的泛化,有更好的鲁棒性。
    4.均衡采样,在实际的操作中就是打乱数据,随机性的抽取数据进行训练,加强对未知数据的泛化能力。
  • 降低欠拟合的方法:
    1.增加数据特征,让机器学习到更多关于数据的特性,增加学习维度。
    2.提高模型的复杂度,更好地对数据的分布进行拟合。
    3.对于模型而言,可以增加模型的训练次数,学习到更多关键的数据和特征。
    4.降低正则化权重系数。

这里稍稍提一嘴正则化:

  • L1正则化:指权值向量w中各个元素的绝对值之和
    J = J 0 + α ∑ w ∣ w ∣ J 0 : 原 始 损 失 函 数 J = J_0 + \alpha\sum_w|w|\\J_0:原始损失函数 J=J0+αwwJ0:

  • L2正则化:指权值向量w中各个元素的平方和
    J = J 0 + α ∑ w w 2 J 0 : 原 始 损 失 函 数 J = J_0+\alpha\sum_ww^2\\J_0:原始损失函数 J=J0+αww2J0:

你可能感兴趣的:(机器学习基础,机器学习)