1、过拟合与欠拟合
什么是拟合?拟合是指你逼近目标函数的远近程度。机器学习中的拟合,可以分为过拟合和欠拟合两种。
图1(回归问题的三种拟合状态):欠拟合--正常拟合--过拟合
-
过拟合over-fitting
所谓过拟合,其实就是训练的模型在训练样本中表现得过于优越,近乎完美的预测/区分了所有的数据,但是在验证数据集以及测试数据集中表现不佳。在性能的角度上讲,过拟合就是协方差过大(variance is large),同样在测试集上的损失函数(cost function)会表现得很大。
过拟合会使模型变得复杂,并尽可能拟合训练集,造成在训练集上的准确率特别高,这里就会有一个问题就是:训练集是不靠谱的,其中有容错的数据。直接点,训练集中特别是十几万的数据,会有脏数据,这些脏数据也成为负样本,会造成模型训练有误差,模型在训练的时候并不清楚那些是脏数据,它只会不停的去拟合这些数据,所以过拟合的模型在训练集上准确率特别高,但训练集其实只是整个数据集中的一部分,其包含两部分特征,一部分是整个数据集共有的特征,一部分是训练集自身共有的特征,当过拟合时,模型学到的是这两部分的特征,此时拿模型去在测试集上测试时,因为测试集不包含训练集自身共有的特征,所以测试集在模型上就不会取得很好的效果。
-
欠拟合under-fitting
相对于过拟合,欠拟合稍微比较和理解一些。所谓欠拟合,其实就是模型的拟合程度不够,泛化性能差,在训练集上表现效果差,没有充分的利用数据,预测的准确度低。欠拟合在训练集上的准确率不高,同时在测试集上的准确率也不高,这样如何训练出来的模型也得不到较好的效果。
-
如何判断过拟合还是欠拟合
可以通过绘制损失函数随数据集增加的学习曲线来判断过拟合还是欠拟合。
模型欠拟合(高偏差),是指拥有足够的训练样本时,训练误差和测试误差都很高,并且训练误差约等于测试误差。
模型过拟合(高方差),是指随着训练样本的增加,训练误差在增加,测试误差在减少,但训练误差远远小于测试误差。
注:准备几个不同时间窗口、不同范围的训练集和测试集,然后在不同数据集里分别对模型进行交叉验证,这是工业界判断模型欠拟合或过拟合的最常用方法。
-
如何防止过拟合
过拟合问题的根本原因是特征维度过多,导致拟合的函数完美的经过训练集,但是对新数据的预测结果则较差。
解决过拟合的方法:
(1)减少特征维度,可以人工选择保留的特征,或者模型选择算法。
(2)正则化:正则化是指在优化目标函数或代价函数是,在目标函数后面加上一个正则项。通过正则项来影响模型的复杂度。
(3)数据集扩增:即需要得到更多的符合要求的数据,让训练集中的噪音数据占比越来越小,这样噪音对模型的影响就较小,可以防止模型过拟合。
(4)模型选择:挑选相对简单的模型进行训练,对模型中的参数、训练层数等做限制。
-
如何解决欠拟合
欠拟合的问题比较好理解,根本的原因是特征维度过少,导致拟合的函数无法满足训练集,误差较大。
解决欠拟合的方法:
(1)增加训练数据:让模型学习的更充分一些。
(2)增加特征维度:即添加新特征,从业务思路上构造新特征是最重要的优化措施。
(3)优化算法:提升模型复杂度。
2、梯度与学习率
-
什么是梯度?
梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。简单的说,梯度不是一个实数,而是一个向量,即有大小又有方向。
在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式表示出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T。对于在点(x0,y0)的具体梯度向量就是(∂f/∂x0, ∂f/∂y0)T,或者▽f(x0,y0)。如果是3个参数的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此类推。
-
梯度的几何意义
梯度向量的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。
-
梯度下降法及相关概念
在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。
梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 -f(θ)的最大值,这时梯度上升法就派上用场了。
监督式学习通过定义一个模型,并根据训练集上的数据估计最优参数。梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代,并在每一步中最小化成本函数(cost function)来估计模型的参数(weights)。
步长(Learning rate):步长也叫学习率,决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。学习率决定了参数移动到最优值的速度快慢。如果学习率过大,那么参数更新的幅度就非常大,很可能会越过最优值,导致网络收敛到局部最优点;如果学习率过小,会导致网络loss下降非常慢,优化的效率可能过低,长时间算法无法收敛。
学习率的选择策略在网络的训练过程中是不断在变化的,在刚开始的时候,参数比较随机,所以我们应该选择相对较大的学习率,这样loss下降更快;当训练一段时间之后,参数的更新就应该有更小的幅度,所以学习率一般会做衰减,衰减的方式也非常多,比如到一定的步数将学习率乘上0.1,也有指数衰减等。
梯度下降算法中使用学习率更新参数向量:
特征(feature):特征指的是样本中输入部分,与特征对应的是样本的label,以二分类为例,正样本label=1,负样本label=0。
假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为ℎ?(?)。比如对於单个特征的m个样本(?(?),?(?))(?=1,2,...?),可以采用拟合函数如下: ℎ?(?)=?0+?1?hθ(x)=θ0+θ1x。
损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。
关于梯度下降法的具体细节,可以参考这篇博客:梯度下降小结