两种拟合问题
要改进,首先要知道错在哪儿,下面是两种错误的情形。
欠拟合/高偏差
如左图,欠拟合与高偏差都指一种情况,即模型对训练集都无法很好的拟合。
过拟合/高方差
如右图,过拟合与高方差都指这种情况,模型对训练集模拟的很好,但是难以泛化应用到训练集以外的数据。
判断算法处于哪种拟合问题
绘制样本-拟合结果图
一种典型的判断方法就是直接像开篇图一样,把样本点和拟合的结果绘制在同一张图上,可以直观的观察出我们的模型处于哪种拟合状态。但并不是所有问题都可以像曲线拟合这样可视化的,这种方法只能适用于一些简单问题。
绘制学习曲线
学习曲线是代价函数随着训练集大小变化的曲线。在一张图中,我们绘制训练集和验证集两条曲线,通过观察这两条曲线的关系来判断模型所处拟合状态。
一般而言,随着训练集的大小增加,训练集的代价函数值都会增大,因为随着样本变多,要完美地兼顾各点就会愈发困难;验证集的代价函数则会减小,因为在学习了越来越多的样本后,尽管模型的泛化性能可能不佳,但总比样本数量少时优秀。
而高偏差与高方差的区别就在于两条曲线的关系:对于高偏差模型来说,模型缺少高次项,当训练集大小增大到某个界限时,训练集代价和验证集代价就会趋于不变且两个代价值会比较接近(比如用直线去拟合高次曲线,到后面不管再添加多少训练集,都不会得到一个好的训练结果)。
而对于高方差模型,一般都是训练集拟合的很好,但验证集表现不佳,所以会出现验证代价远高于训练代价的情况,但随着训练集的增大,验证集代价会持续减少,模型会有一定的改善。
确诊后的治疗手段
增加训练集大小
在上面也说了,对过拟合问题,可以通过增加训练集大小改善,但对于欠拟合没有什么作用。所以当判断我们的模型为欠拟合时就不要花费时间去搜集更多数据了。
修改特征值数目
之前有讲过,过拟合问题就是因为太多不必要的特征产生的,所以适当地减少特征值数目可以有效解决过拟合问题。但对于欠拟合问题,减少特征值数目只会让模型性能雪上加霜。
与上面相反,增加特征值数目适用于高偏差问题。
修改正则参数
设置正则参数可以缓解过拟合问题,但正则参数太小效果不明显,正则参数太大又会欠拟合,需要小心调整。
一个较合理的办法是,采用训练集、验证集、测试集方法,设置一系列 λ \lambda λ在训练集中训练,之后在验证集中检验,选择一个代价最小的 λ \lambda λ,之后在测试集中观察是否有拟合问题。
对于神经网络
对于神经网络,一般来说,拥有更多隐藏单元(隐藏层)的网络更容易出现过拟合,此时配以合适的正则参数可以得到一个性能较好的模型,唯一的缺点是运算速度较慢。而简单的网络则容易欠拟合,优点是运算速度快。