公司动态
学习曲线-过拟合和欠拟合要做什么以及原因
学习曲线是一种帮助你理解学习算法在经验增加时表现的方法这里的经验指的是算法在训练的时候拥有的样本数量横轴是样本数量纵轴是误差测试误差Jcv大致是这样的慢慢下降训练误差则是上升的为什么会这样呢我们来看一下我们从一个样本开始说起当有一个样本的时候直线直接经过这一点误差是0完美拟合当有2个样本的时候直线直接经过这2点误差是0完美拟合当有3个样本的时候集合就有些困难了有些点可能不会在模型的线上所以训练误差变大4个样本的时候这样的点更多了后面越来越多知道平均值趋于平稳还有一点交叉验证误差通常会高于训练误差因为将参数你和到训练集上因此期望训练集的表现稍微好一点或者当M很小的时候可能好的更多但是在交叉验证集上则不然现在让我们看看高偏差算法和高方差算法的学习曲线是什么样子的从高偏差或者叫欠拟合开始高偏差训练误差刚开始会上升后来会趋于平平坦但是为什么会趋于平坦呢我们看右边因为模型拟合的过于简单是一条直线样本会均匀的分布在模型的两侧一旦超过某个点模型的误差就会趋于平坦这个模型对于如此多的数据来说太简单了我们画出模型的基线性能红线这个是人类或者其他算法能够达到的误差模型的训练误差在这个误差的上面看出来模型和人类能力还有一段不小的差距这是我们判断算法具有高偏差的指标就是我如果我们可以拟合一个更复杂的函数可能会做的更好如果我们嗯向右延的话增加模型的样本数又回怎么样呢他们都会保持平坦无论这个数据集增长的有多大这两种线都不会找到一种方法让误差降到人类水平这就得到了一个结论学习算法具有高偏差就是模型太简单获得更多的训练数据并不会有多大的帮助这就是为什么在投入大量精力收集数据之前值得检查学习算法是否具有高偏差让我们看一下高方差的学习算法的学习曲线是什么。高方差的新号是Jcv元高于Jtrain测试误差远高于训练误差在训练集的表现远远高于在测试机中的表现如果绘制一个基准线这个模型刚开始训练误差远低于人类水平如果一个学习方法存在高方差那么获取更多的训练数据确实可能有所帮助因为向右眼神这条全可以预期Jcv会下降