Review
越复杂的model,在testing data上的error未必越低。
error来自两个地方:
- bias
- variance
f_star是f_hat的一个估测值,f_star可能不等于f_hat,距离可能来自于bias,也可能来自于variance方差
估测变量x的mean均值(假设变量x的均值为μ,方差为σ^2):
先sample N个点,将其算平均值m,一般都不等于x的均值μ
但是计算m的期望值,会正好等于μ
N越大,分布越集中;N越小,分布越分散
估测x的σ^2
重点图如下,便于理解
错误来自于bias(瞄准的位置)和variance(枪的性能),理想情况是二者都小/没有。
点越集中,方差越小;离中心越远,偏差越大。
平行时空,抓到不同的宝可梦
不同宇宙中,找到的f*是不同的
在100个平行的宇宙中,各抓取10个宝可梦,都去找一个f*
100个不同的w和b
简单模型:很集中,variance很小
复杂模型:散布分散,variance很大
原因:简单模型受不同data影响较小
靶心代表理想的函数,目标结果。
实验结果如下:
黑线代表:靶心位置;
红线代表:做5000次实验每一次找出的f*都不一样,model也不一样;
蓝线代表:将这5000次f*平均后
f
ˉ
\bar f
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.02566em; vertical-align: -0.19444em;"></span><span class="mord accent"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.83122em;"><span class="" style="top: -3em;"><span class="pstrut" style="height: 3em;"></span><span class="mord mathdefault" style="margin-right: 0.10764em;">f</span></span><span class="" style="top: -3.26344em;"><span class="pstrut" style="height: 3em;"></span><span class="accent-body" style="left: -0.08333em;">ˉ</span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.19444em;"><span class=""></span></span></span></span></span></span></span></span></span></p>
下图的解释:
model是一个function set,使用一个范围表示function set。最好的function也只能从function set里选出来。
-
而一个简单的model的space很小,又可能没有包含target,所以无论如何sample,平均起来都不可能得到target。
-
复杂的model,space很大,他的function set包含了target,只不过可能无法找出那个target,因为每次给的training data不一样,如果散布在target附近的,则只要平均起来就可能得到
f ˉ \bar f </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.02566em; vertical-align: -0.19444em;"></span><span class="mord accent"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.83122em;"><span class="" style="top: -3em;"><span class="pstrut" style="height: 3em;"></span><span class="mord mathdefault" style="margin-right: 0.10764em;">f</span></span><span class="" style="top: -3.26344em;"><span class="pstrut" style="height: 3em;"></span><span class="accent-body" style="left: -0.08333em;">ˉ</span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.19444em;"><span class=""></span></span></span></span></span></span></span></span></span></p> </li></ul>
如下图,其中
简单model:大bias,小variance
复杂model:小bias,大variance
error来自bias(红线)和variance(绿线),蓝色线是二者共同造成的影响
- error来自于variance很大:overfitting 过拟合(太复杂了)
- error来自于bias很大:underfitting 欠拟合(太简单了)
如何知道目前是bias大还是variance大?
- 如果你的模型没有办法fit你和你的training example(少数的几个training data点),代表bias大,underfitting了。
- 如果在training data上得到一个小的error,而在testing data上却得到一个error,说明这个model的variance大,说明overfitting了
解决方法:
bias大:
- 要redesign一个新model,有可能model根本没有包含target
f ^ \hat{f} </span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.15232em; vertical-align: -0.19444em;"></span><span class="mord accent"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.95788em;"><span class="" style="top: -3em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right: 0.10764em;">f</span></span></span><span class="" style="top: -3.26344em;"><span class="pstrut" style="height: 3em;"></span><span class="accent-body" style="left: -0.08333em;">^</span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.19444em;"><span class=""></span></span></span></span></span></span></span></span></span>,所以可以考虑加入更多的feature、更高的次数。(增加data没有效果)</li></ul>
variance大:
- 增加data数量,数据集增强,很有效控制variance过大的方法
- Regularization正则化,在loss function后加一项
在bias和variance中权衡,选择一个模型可以平衡两种error,使得总error最小。
但是不可以做的事情是:利用自己手上已有的testing set来选择最好的模型的时候,选出来的模型在真正的testing data上,未必是最好的模型
testing set有自己的bias:数据采集的偏差。除非你的testing set比较好地代表了总体分布,否则实际使用时Err一定会变差
正确做法: 交叉验证cross validation
若不相信某次分trin和test的数据集,可以分好多次,即,N折交叉验证N-fold Cross Validation
把最好的效果的model用在最后的testing test