问题介绍
我们大致可以将训练出的参数分为三类:欠拟合、正常、过拟合。
以方程次数为例,对于一个简单的单特征值问题,我们可能拟出如下模型:
而方程次数过低容易导致欠拟合,方程次数过高可能导致过拟合:
方程次数选
首先来讲一个比较简单的方法,我们把数据集分成训练集(70%)和测试集(30%),用每一种方程训练集得出对应的最优参数 θ \theta θ。
然后每个方程用对应的参数 θ \theta θ去测试集上跑,得出在测试集上的误差 J t e s t ( θ ) J_{test}(\theta) Jtest(θ),然后选择一个较小的作为最后的结果(方程次数和对应参数)。
然而这样并不公平,因为方程的次数 d d d也是一个参数,而这个 d d d相当于在测试集中拟合而出,可能不具备可推广性。
做法:
所以我们将数据分成三部分:训练集(60%)、交叉验证集(20%)、测试集(20%)。
再验证集中拟合出参数 d d d(选择 J c v ( θ ) J_{cv}(\theta) Jcv(θ)最小的那个),再到测试集中跑出实际的测试误差 J t e s t ( θ ) J_{test}(\theta) Jtest(θ)。
偏差与方差的判断
我们画出
d
d
d与训练集误差和验证集误差的关系:
可以得出结论:
- 高偏差(欠拟合): J t e s t ( θ ) J_{test}(\theta) Jtest(θ)与 J c v ( θ ) J_{cv}(\theta) Jcv(θ)都很大,且较为接近
- 高方差(过拟合): J t e s t ( θ ) J_{test}(\theta) Jtest(θ)远小于 J c v ( θ ) J_{cv}(\theta) Jcv(θ)
λ \lambda λ的选择
正则化中的惩罚力度 λ \lambda λ的地位类似上述的 d d d。
λ过大时不能拟合,过小时又不能正则化导致过拟合。
我们可以用选择
d
d
d的方式让自动选择λ:
我们画出
λ
\lambda
λ与训练集误差和验证集误差的关系:
得出相同的结论:
- 高偏差(欠拟合): J t e s t ( θ ) J_{test}(\theta) Jtest(θ)与 J c v ( θ ) J_{cv}(\theta) Jcv(θ)都很大,且较为接近
- 高方差(过拟合): J t e s t ( θ ) J_{test}(\theta) Jtest(θ)远小于 J c v ( θ ) J_{cv}(\theta) Jcv(θ)
学习曲线
我们画出 J t e s t ( θ ) 、 J c v ( θ ) J_{test}(\theta)、J_{cv}(\theta) Jtest(θ)、Jcv(θ)与测试样本数量的关系图:
-
正常情况下,两个在一定数据后都较小,且随着数据量的增加趋向于相同
-
高偏差时,两个都很高,且趋于相同,趋于水平(增加数据量无效):
-
高方差时, J t e s t ( θ ) J_{test}(\theta) Jtest(θ)较小,而 J c v ( θ ) J_{cv}(\theta) Jcv(θ)较大。随着数据量的增加,过拟合的现象会有所改善,所以两条线会慢慢接近(需要增加数据量)
解决方法
在确定是高方差(过拟合)时,我们可以尝试:
- 增加数据量
- 减少特征
- 增加 λ \lambda λ
高偏差(欠拟合)时,我们可以尝试:
- 增加特征
- 增加多项式
- 减少 λ \lambda λ
神经网络
小型神经网络容易欠拟合,大型的容易过拟合