where does the error come from?(为什么最复杂的模型反而Loss函数的值越大)
error有两个来源 而我们希望找到的f*越接近f^越好,两者的差别来源于bias和variance。 注:Niantic是研发宝可梦的公司 问题来了,bias和variance分别是什么? 注:图中Larger和Smaller是相反的。
如果mu等于期望值,称为unbiased。
决定了散布在期望周围散得有多开。var[m]即为variance,大小取决于取样数,取样越多variance越小。越集中 s平方的期望可算,但它始终比Sigma平方小一点,要想更接近,就要增加样本的数量N。 更通俗地解释bias和variance,bias是瞄准就做的不太好,variance是瞄准后打偏了。(我们希望bias和variance都小) 注意f是训练出来的,f-是许许多多f的期望,f^是真正的进化函数,只有宝可梦的研发者才知道。 我们希望bias小,是f能够接近f-。 我们希望variance小*,是f们能够集中。 越复杂的Model(函数次数高),其variance值越大。 原因:因为Model越简单越不容易受样本影响,举个极端的例子f(x)=c。 越复杂的Model,其bias值越小。 如下图所示,其中左为1次函数,右上为3次函数,右下为5次函数(观察蓝色线和黑色线*的接近程度)。 原因:较简单Model,也许压根就没把target包含进去,谈何找到。
随着模型变复杂,bias减小(红线),variance增大(绿色线)。综合考虑两者是蓝色线。 欠拟合variance小但bias大,过拟合bias小但variance大,都不好。
重定义Model ①增加更多特征作为输入项 ②增加模型的复杂度(如提高次数)
①训练每个f*的时候,收集更多的数据(缺陷:现实中可能收集不到那么多) ②Regularization(下图1没加正则项的曲线,下图2加了权重较小的正则项,下图3加了权重较大的正则项) (缺陷:可能导致bias增大) 关于什么是正则项, 见上一篇https://blog.csdn.net/weixin_44997802/article/details/109206305
方法1-交叉验证:将训练集分成训练集和验证集,先使用训练集训练,得到较好的那个再使用训练集+验证集训练,这样得到的模型,虽然在public testing set上结果未必佳,但却能在private testing set上结果更好(我们想要的就是这个)。 需要注意的是,即使在public testing set上得到的结果不见得多好,也不要回头去找参数调整。(Not recommend) 方法2 将训练集按三种分法分别训练三个模型,取平均err最小的Model。
