机器学习—诊断偏差和方差
给定这个数据集,如果在上面画一条直线,它做得不太好,我们说这个算法有很高的偏差或者它不符合这个数据集,或者拟合一个四阶多项式,然后它有很高的方差,或者它太合身了,在中间,如果你拟合一个二次多项式,那看起来就很不错,这恰到好处因为这只是一个单一功能的问题,我们可以画出函数f,但如果你有更多的功能,你不能很容易地描绘出f并想象它做得很好,如果算法有高偏差或高方差,将是看看你的算法的性能,在训练集上,特别是在交叉验证集上。
先看一下左边的例子,如果你计算Jtrain算法在训练集上做得怎么样,这里的Jtrain比较高,因为在例子和模型的实际预测之间实际上有相当大的误差,Jcv也会很高,因为如果你有一些新的例子,也许像这样的例子是算法以前在这里没有看到的,该算法在以前从未见过的示例上也做得不太好,高偏差算法的一个特点是在训练中甚至做的不太好,所以当Jtrain很高时,这给了你一个强有力的迹象,表明这个算法有很高的偏差。
再看右边的例子,如果是Jtrain,这个在训练集上做的有多好,它在训练场上表现得很好,与训练数据非常吻合,所以这里的Jtrain会很低,但如果你用其他房子来评估这个模型,不在训练集里,然后你会发现Jcv交叉验证误差会很高,因此,算法具有高方差的特征签名或特征cu将是如果Jcv比Jtrain高得多,换句话说,它在看到的数据上比没有看到的数据上做的更好,这是一个很好的指标,表明你的算法有很高的方差,我们要做的是通过计算Jtrain和Jcv看看Jtrain是否高,或者如果Jcv比Jtrain高得多,即使你不能画出你的算法是否有很高的函数f,偏差或高方差。
最后是中间的例子,如果Jtrain比较低,因为它在训练场上表现得好,交叉验证集,你发现Jcv也很低,所以Jtrain不是太高,表明这没有高偏差问题,Jcv不比Jtrain差多少,这表明它也没有高方差问题,对于这个应用程序来说,二次模型似乎是一个很好的模型。
分享另一种关于偏差和方差的观点,总结一下,当d=1的线性多项式,Jtrain很高,Jcv很高,当d=4时,Jtrain低,但是Jcv高,当d=2时,两者都很低,现在让我们对偏差和方差有不同的看法,所以画一个数字,这个图的横轴是多项式的度,我们正在拟合数据,左边对应d的一个小值,比如d=1,它对应于一条直线的拟合,在右边会相应地说d=4,甚至更高的d值都符合这个高阶多项式,所以如果你画Jtrain的WB,作为多项式次数的函数,你会发现,当你在这里拟合一个越来越高次的多项式时,假设我们没有使用正则化,但是当你拟合一个越来越高阶的多项式,训练误差会下降,因为你有一个非常简单的线性函数,它与训练数据不太吻合,当你拟合一个二次函数,或三阶多项式或四阶多项式,越来越符合训练数据,所以随着多项式次数的增加,Jtrain通常会在下一个。让我们看看Jcv这就是它在数据上做得有多好,因为它不适合,我们看到当d=1时,当多项式的次数很低时,Jcv很高,因为它不适合,所以它在交叉验证集上做的不好,右边也是,当多项式的次数非常大时,假设4在交叉验证集上也做的不好,因为它也很高,但如果d在两者之间,然后它实际上做得更好,所以如果你改变多项式的次数,你实际上会得到一个曲线,看起来像这样,他下降然后又上升,如果多项式的次数太低,它不适合,所以在交叉验证集上做的不好,如果太高,它过于适合,在交叉验证集上也做的不好,它过于适合,在交叉验证集上也做得不好,只有在中间的某个地方才是合适的,所以二阶多项式,示例最终得到了一个较低的交叉验证错误,既没有高偏差也没有高方差。
如何诊断学习算法中的偏差和方差?
如果你的学习算法有很高的偏差或不适合数据,关键指标将是Jtrain是否高,所以这对应于曲线的最左边部分,这就是Jtrain高的地方,通常有Jtrain,Jcv会很接近对方,如果有高方差,高差异的关键指标是如果Jcv比Jtrain大得多,在数学中,这个双大于号指的是大得多,最右边部分是Jcv比Jtrain大得多的地方,通常Jtrain会很低,但关键的指标是Jcv是否比Jtrain大得多,这就是发生的事情,当我们将一个非常高阶的多项式拟合到这个小数据集时,即使我们刚刚看到了偏差和方差,在某些情况下,同时具有高偏差和高方差是可能的,对于线性回归,不会看到这种情况发生这么多,但事实证明,如果你训练一个神经网络,在某些应用中,不幸的是,有高偏差和高方差,识别这种情况的一个方法是,如果Jtrain很高,所以在训练场上表现得不是很好,更糟糕的是,交叉验证误差再次比训练集大得多,高偏差和高方差的概念对于一个线性模型来说,这并不真正发生,但要给出它看起来像什么的直觉,就好像部分输入,你有一个非常复杂的模型,所以它超出了输入部分,但出于某种原因,其它部分的输入,甚至与训练数据不太吻合,在本例中,看上去像是人造的,因为它是一个单一的特征输入,很适合训练,我们过度适应了部分输入,我们甚至不能很好的拟合训练数据,我们不适合输入的部分,这就是为什么在一些应用程序中可能会得到高偏差或高方差,如果算法在训练集上表现不佳,这将是一个指标,它甚至比在训练场上做的更糟,对于大多数学习应用程序,可能主要有一个高偏差或高方差问题而不是同时两者,有时两者同时存在是可能的,高偏见意味着甚至在训练场上都做的不好,高方差均值在交叉验证集上比训练集差得多。