Machine Learning Chinese NLP :::: Diagnosing Bias vs. Variance - Chad Salinas ::: Data Scientist
Life and times of Chad Salinas
Chad Salinas, golf caddy, data scientist, chad rPubs, recovering chess addict, daddy caddy
1300
post-template-default,single,single-post,postid-1300,single-format-standard,qode-listing-1.0.1,qode-social-login-1.0,qode-news-1.0,qode-quick-links-1.0,qode-restaurant-1.0,ajax_fade,page_not_loaded,,qode-title-hidden,qode_grid_1300,qode-theme-ver-12.0.1,qode-theme-bridge,bridge,wpb-js-composer js-comp-ver-5.4.2,vc_responsive

Machine Learning Chinese NLP :::: Diagnosing Bias vs. Variance

Diagnosing Bias vs. Variance

当你运行一个学习算法时 
如果这个算法的表现不理想 
那么多半是出现 
两种情况 
要么是偏差比较大 
要么是方差比较大 
换句话说 出现的情况要么是欠拟合 
要么是过拟合问题

那么这两种情况 
哪个和偏差有关 
哪个和方差有关 
或者是不是和两个都有关 
搞清楚这一点非常重要 
因为能判断出现的情况 
是这两种情况中的哪一种 
其实是一个很有效的指示器 
指引着可以改进算法的 
最有效的方法和途径

在这段视频中 
我想更深入地探讨一下 
有关偏差和方差的问题 
希望你能对它们有一个更深入的理解 
并且也能弄清楚怎样评价一个学习算法 
能够判断一个算法是偏差还是方差有问题 
因为这个问题对于弄清 
如何改进学习算法的效果非常重要 
好的 这几幅图 
你已经见过很多次了 
如果你用两个很简单的假设来拟合数据 
比如说用一条直线 那么不足以拟合这组数据(欠拟合)

而如果你用两个很复杂的假设来拟合时 
那么对训练集来说 
则会拟合得很好 
但又过于完美(过拟合) 
而像这样的 
中等复杂度的假设 
比如某种二次多项式的假设 
次数既不高也不低 
这种假设对数据拟合得刚刚好 
此时对应的的泛化误差 
也是三种情况中最小的

现在我们已经掌握了 
训练集 验证集和测试集的概念 
我们就能更好地理解 
偏差和方差的问题 
具体来说 
我们沿用之前所使用的 
训练集误差和验证集 
误差的定义 
也就是平方误差 
即对训练集数据进行预测 
或对验证集数据进行预测 
所产生的平均平方误差

下面我们来画出如下这个示意图 
横坐标上表示的是 
多项式的次数 
因此横坐标越往右的位置

表示多项式的次数越大

那么我们来画这幅图对应的情况 
d可能等于1的情况 
是用很简单的函数 
来进行拟合 
而在右边的这个图中 
水平横坐标表示 
有更多更大的d值 
表示更高次数的多项式 
因此这些位置对应着使用 
更复杂的函数来拟合你的训练集时所需要的d值

让我们来把训练集误差 
和交叉验证集误差画在这个坐标中 
我们先来画训练集误差 
随着我们增大多项式的次数 
我们将对训练集拟合得越来越好 
所以如果d等于1时 
对应着一个比较大的训练误差 
而如果我们的多项式次数很高时 
我们的训练误差就会很小 
甚至可能等于0 
因为可能非常拟合训练集 
所以 当我们增大多项式次数时 
我们不难发现

训练误差明显下降

这里我写上J下标train 
来表示训练集误差 
因为随着我们对数据拟合 
所需多项式次数的增大 
训练误差是趋于下降的 
接下来我们再看交叉验证误差 
事实上如果我们观察测试集误差的话 
我们会得到一个和交叉验证误差 
非常接近的结果 
所以 我们知道 如果d等于1的话 
意味着用一个很简单的函数来拟合数据 
此时我们不能很好地拟合训练集(欠拟合) 
也就是说 我们会得到 
一个较大的交叉验证误差 
而如果我们用一个中等大小的 
多项式次数来拟合时 
在前一张幻灯片中 
我们用的d等于2

那么我们会得到一个 
更小的交叉验证误差 
因为我们找了一个能够更好拟合数据的次数 
同样地 反过来 
如果次数d太大 
比如说d的值取为4 
那么我们又过拟合了 
我们又会得到一个较大的交叉验证误差 
因此 如果你平稳地过渡这几个点 
你可以绘制出一条平滑的曲线 就像这样 
我用Jcv(θ)来表示 
同样地 如果你画出Jtest(θ) 
你也将得到一条类似的曲线

这样一幅图同时也帮助我们 
更好地理解偏差和方差的概念 
具体来说 
假设你得出了一个学习算法 
而这个算法并没有表现地 
如你期望那么好

所以你的交叉验证误差或者测试集误差都很大 
我们应该如何判断 
此时的学习算法 
正处于高偏差的问题还是高方差的问题 
交叉验证误差比较大的情况 
对应着曲线中的这一端 
或者这一端

那么左边的这一端 
对应的就是高偏差的问题 
也就是你使用了一个 
过于小的多项式次数 
比如d等于1 
但实际上我们需要一个较高的多项式次数来拟合数据 
相反地 
右边这一端对应的是高方差问题

也就是说 多项式次数d 
对于我们的数据来讲太大了 
这幅图也提示了我们 
怎样区分这两种情况 
具体地说

对于高偏差的情况 
也就是对应欠拟合的情况 
我们发现

交叉验证误差和训练误差 
都会很大 
因此 如果你的算法

有偏差问题的话 
那么训练集误差 
将会比较大 
同时你可能会发现 
交叉验证集误差也很大 
两个误差可能很接近 
或者可能验证误差稍大一点 
所以如果你看到这样的组合情况 
那就表示你的算法 
正处于高偏差的问题

反过来 如果你的算法处于高方差的问题 
那么如果你观察这里 
我们会发现 Jtrain

就是训练误差 
会很小 
也就意味着 你对训练集数据拟合得非常好 
而你的交叉验证误差

假设此时我们最小化的 
是平方误差 
而反过来 
你的交叉验证集误差

或者说你的交叉验证集

对应的代价函数的值 
将会远远大于训练集误差 
这里的双大于符号 
是一个数学符号 
表示远远大于 
用两个大于符号表示

因此如果你看见这种组合的情况 
这就预示着

你的学习算法可能正处于 
高方差和过拟合的情况 
同时 区分这两种不同情形 
的关键依据是 
如果你的算法处于高偏差的情况 
那么你的训练集误差会很大

因为你的假设

不能很好地拟合训练集数据 
而当你处于高方差的问题时 
你的训练误差 
通常都会很小 
并且远远小于交叉验证误差 
好的 但愿这节课能让你 
更清楚地理解 
偏差和方差这两种问题

在之后几段视频中 
我还将对偏差和误差做更多的解释

但我们之后要关注的 
是诊断一个学习算法 
是处于高偏差还是高方差的情况 
在后面几段视频中我还将向你展示更多细节

我们将会看到 
通过分清一个学习算法是处于高偏差 
还是高方差 
还是两种情况的结合 
这能够更好地指引我们 
应该采取什么样的措施

来提高学习算法的性能表现 【果壳教育无边界字幕组】翻译:所罗门捷列夫 
的关键依据是 
如果你的算法处于高偏差的情况 
那么你的训练集误差会很大 
因为你的假设 
不能很好地拟合训练集数据

而当你处于高方差的问题时 
你的训练误差 
通常都会很小 
并且远远小于交叉验证误差

希望这节课的内容 
更清楚地理解 
偏差和方差这两种问题 
在之后几段视频中 
我还将对偏差和误差做更多的解释 
但我们之后要关注的 
是诊断一个学习算法 
是否处于高偏差或高方差的情况 
在后面几段视频中我还将向你展示更多细节 
我们将会看到 
通过分清一个学习算法是处于高偏差 
还是高误差 
还是两种情况的结合 
这能够更好地指引我们 
应该采取什么样的措施 
来提高学习算法的性能表现 
 

Any programming problem can be solved by adding a level of indirection.

– David J. Wheeler

No Comments

Sorry, the comment form is closed at this time.