wap网站自动,站长工具a级,搜资源,最好的企业网站学习曲线是帮助理解学习算法如何工作的一种方法#xff0c;作为它所拥有的经验的函数。
绘制一个符合二阶模型的学习曲线#xff0c;多项式或二次函数#xff0c;画出交叉验证错误Jcv#xff0c;以及Jtrain训练错误#xff0c;所以在这个曲线中#xff0c;横轴将是Mtrai…学习曲线是帮助理解学习算法如何工作的一种方法作为它所拥有的经验的函数。
绘制一个符合二阶模型的学习曲线多项式或二次函数画出交叉验证错误Jcv以及Jtrain训练错误所以在这个曲线中横轴将是Mtrain即训练集大小或算法可以从中学习的示例数在垂直轴上画出误差所以让我们从绘制交叉验证错误开始绿线代表Jcv(w,b)当Jtrain训练集规模变大所以交叉验证错误现在下降了绘制训练错误的Jtrain(w,b)随着训练集的规模越来越大原来训练错误实际上会是这样的(蓝线随着训练集的规模越来越大训练集误差实际上增大了为什么会出现这种情况
将从一个例子开始当你只有一个训练例子如果你拟合一个二次模型你可以很容易的知道直线或曲线你的训练误差将为0如果你有两个这样的训练例子你可以再次拟合一条直线实现零训练误差事实上如果你有三个训练例子二次函数仍可以很好的拟合这一点几乎没有训练错误但是如果你的训练集再大一点假设你有四个训练例子然后要完美地适应所有四个例子就变得有点难了你可能会得到一条曲线看起来很适合它所以当你把训练集的大小增加到四个训练误差实际上上升了一点我们有五个训练例子怎么样你可以更好的适应它但是要完全适应它们就更难了当你有一个更大的训练集只是越来越难适应每一个你的训练例子所以总结一下当你有非常少的训练例子像一两个甚至三个相对容易得到零或非常小的训练误差但是当你有一个更大的训练集对于二次函数来说更难完美地拟合所有的训练示例这就是为什么随着训练集变得越来越大训练误差增加是因为很难拟合所有的训练示例注意这些曲线的另一个特点交叉验证误差通常会高于训练误差因为你将参数拟合到训练集或者当m小的时候也许在训练集上比在交叉验证集上要好得多。 现在让我们看看学习曲线是什么样的
对于高偏差算法和高方差算法让我们从高偏差或不合身的情况开始回想一下高偏差的一个例子是如果你把一个线性函数拟合到一条曲线上如果你要绘制训练错误然后训练误差会像你预期的那样上升事实上这条训练误差曲线可能会开始变平或者称之为高原意思是过了一段时间就变平了这是因为当你得到越来越多的训练例子当你拟合简单的线性函数时你的模型实际上变化不大它符合一条直线即使你得到越来越多的例子没有太多要改变的了这就是为什么平均训练误差在那时间后就会变平同样交叉验证出错误也会下降一段时间也会变平这就是为什么Jcv又比Jtrain高但Jcv往往看起来像那样因为超过了某一点即使你得到越来越多的例子拟合的直线不会有太大的变化这只是一个太简单的模型不适用于这么多数据所以这两条曲线Jcv和Jtrain趋于平坦如果你有一个基准性能水平的衡量标准例如人的水平表现然后它将倾向于一个低于Jtrain的值还有Jcv所以人类水平的表现可能是这样的。在性能的基线水平和Jtrain之间有很大的差距我们发现这个算法有很高的偏差。 如果你能有一个更大的训练集如果把m值增加到比这张图的右边更远的地方会是什么样子
想象如果把这两条曲线都向右延伸它们都变平了它们两个可能会继续像那样扁平无论向右边延伸多远这条曲线永远不会相交找到一种方法来降低人类的表演水平或者一直像这样扁平下去不管训练集有多大如果一个算法有很高的偏差获取更多的训练数据本身并没有多大的帮助我们习惯于认为有更多的数据是好的但是如果算法有很高的偏差那么唯一做的就是向它扔更多的训练数据它本身不会让你降低那么多的错误率无论在这个图中添加多少示例直线拟合不会变的更好这就是为什么再投入大量精力收集更多训练数据之前值得检查学习算法是否有很高的偏差。 现在让我们看看学习曲线是什么样子的
对于一种高方差的学习算法如果你拟合一个四阶多项式对于小的lambda甚至lambda0得到一个曲线如右上图所示即使它很符合训练数据它不能概括在这种高方差的情况下随着训练集模型的增加Jtrain将上升Jcv会更高所以你的交叉验证错误比你的训练错误高得多事实上这里有一个巨大的差距高方差在训练集上做得更好比在交叉集上做得要多如果你要绘制性能的基线水平例如人的表现水平Jtrain有时甚至比人类的性能水平还要低也可能人类水平的表现比这低一点但是当你过度训练的时候也许能很好的适应训练集有一个不切实际的低误差比如这个例子中的零误差。人类实际上能够预测房价或者正在处理应用的程序高方差的信号是Jcv是否远高于Jtrain当你有很高的方差时那么增加训练集的大小可能会有很大的帮助特别是如果我们能把这些曲线外推到合适的增量Mtrain上训练误差还会继续往上走但是交叉验证错误有希望下降并接近Jtrain所以在这种情况下仅仅通过增加训练集的大小来降低交叉验证错误是可能的为了让你的算法性能越来越好这与高偏差情况不同如果你唯一要做的是得到更多的训练数据这实际上不会帮助您的学习算法的性能总而言之如果学习算法存在高方差那么获得更多训练的数据确实可能有所帮助。在这个例子中只需获取更多训练数据允许算法从这个相对较高的交叉验证错误更接近人类水平的表现。如果你增加更多的训练例子并继续拟合四阶多项式就会得到一个更好的四阶多项式拟合这个数据。 因此如果你正在构建一个机器学习应用程序你可以画出学习曲线可以将训练集的不同子集即使有一千个训练例子可以用一百个训练例子来训练一个模型看看训练错误和交叉验证错误然后再两百个例子上训练一个模型重复并绘制出学习曲线是什么样子如果你的学习曲线看起来更像是高偏差或高方差使用训练集的不同大小的子集。