机器学习-李宏毅(2019) Machine Learning 02笔记

error的来源

从上节课测试集数据来看,更复杂的模型并不能给测试集带来更好的效果,而这些 E r r o r Error Error 的主要有两个来源,分别是 b i a s bias bias v a r i a n c e variance variance
了解error的来源,我们才能找到提升模型能力的方向,然后再使用对应的方法。
在这里插入图片描述
(顺便说一句,我写这个笔记也参考了很多其他人的笔记。LeeML-Notes里面有一篇关于误差,偏差和方差区别的引用,我觉得很好,所以我也贴出来记录一下机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?

估测

假设真实的模型为 f ^ \hat f f^ , 如果我们知道 f ^ \hat f f^ 模型,那是最好不过了,但是 f ^ \hat f f^只有任天堂公司才知道。
在这里插入图片描述
所以我们只能通过收集 Pokemon精灵的数据,然后通过 step1~step3 训练得到我们的理想模型 f ∗ f^* f,但这其实是 f ^ \hat f f^ 的一个预估。他们之间有个距离,这个距离既可能来自于bias,也可能来自于variance。这个过程就像打靶, f ^ \hat f f^就是我们的靶心, f ∗ f^* f就是我们投掷的结果。如上图所示, f ^ \hat f f^ f ∗ f^* f之间蓝色部分的差距就是偏差和方差导致的。
在这里插入图片描述

估测变量x的偏差和方差

再贴一篇上述博客中的引用,搞清楚怎么计算偏差和方差偏差(Bias)和方差(Variance)——机器学习中的模型选择

评估x的偏差

假设 x x x 的总体均值是 μ \mu μ,总体方差为 σ 2 \sigma^2 σ2

  1. 估计总体均值 μ \mu μ
    • 首先拿到N个样本点: { x 1 , x 2 , … , x N } \{x^1,x^2,…,x^N\} {x1,x2,,xN}
    • 计算样本均值 m m m m = 1 N ∑ x n m = \dfrac {1}{N}\sum {x^{n}} m=N1xn μ \mu μ
      多次使用不同的含有N个样本点的数组来计算平均值,得到 m 1 , m 2 , … m^1,m^2,… m1,m2,。这些 m m m的值可能都不能正好和 μ \mu μ一样。

在这里插入图片描述
但是求 m m m 的期望,就会得到 μ \mu μ

E [ m ] = E [ 1 N ∑ x n ] = 1 N ∑ n E [ x n ] = μ E[m]=E[\frac{1}{N}\sum x^n]=\frac{1}{N}\sum_nE[x^n]=\mu E[m]=E[N1xn]=N1nE[xn]=μ

这个估计是无偏估计(unbiased)。
然后这些样本均值 m m m 在总体均值 μ \mu μ周围会散布的多开呢,这个问题就转化成 m m m对于 μ \mu μ 的离散程度(方差):
V a r [ m ] = σ 2 N Var[m]=\frac{\sigma^2}{N} Var[m]=Nσ2
这个variance取决于每一组中样本的数量 N N N,下图看出 N N N越大越密集(如果N变大,那么每次求得的样本均值 m m m也就越接近总体均值):
蓝色点是m的值

估测x的方差

可以观测到, s 2 s^2 s2是普遍比 σ 2 \sigma^2 σ2要小的,出现在 σ 2 \sigma^2 σ2下方的点(代表 s 2 s^2 s2)要比出现在上方的点要多一些。增大 N N N后, s 2 s^2 s2 σ 2 \sigma^2 σ2的差距就会减小。
在这里插入图片描述
每一个蓝色的点代表找到的一个function。

在这里插入图片描述

为什么会有很多的模型?

讨论系列02中的案例:这里假设是在平行宇宙中,抓了不同的神奇宝贝​。其实就是进行了多次实验。
在这里插入图片描述
用同一个model,在不同的训练集中找到的 f ∗ f^∗ f就是不一样的,拿线性模型来说,也就是得到的 w , b w,b w,b不同。
在这里插入图片描述
在不同的model下各做一百次实验,找一百次 f ∗ f^* f:
在这里插入图片描述

考虑不同模型的方差

一次模型的方差就比较小的,也就是比较集中,离散程度较小。而5次模型的方差就比较大,同理散布比较广,离散程度较大。

所以用比较简单的模型,方差是比较小的(就像射击的时候每次的时候,每次射击的设置都集中在一个比较小的区域内)。如果用了复杂的模型,方差就很大,散布比较开。
这也是因为简单的模型受到不同训练集的影响是比较小的。以极端的例子 y = c y = c y=c为例,在这个模型下,无论哪一个宇宙(也就是不论哪一组样本)找出来的function都是 y = c y = c y=c
在这里插入图片描述

考虑不同模型的偏差

这里没办法知道真正的 f ^ \hat{f} f^,所以假设图中的那条黑色曲线为真正的 f ^ \hat{f} f^
在这里插入图片描述
这次不只是每个模型做100次实验,而是做5000次实验
在这里插入图片描述

结果可视化,一次模型平均的 f ˉ \bar{f} fˉ 没有五次模型的好,虽然五次模型的整体结果离散程度很高。
一次模型的偏差比较大,而复杂的五次模型,偏差就比较小。
直观的解释:简单的模型函数集的space比较小,所以可能space里面就没有包含靶心,肯定射不中。而复杂的模型函数集的space比较大,可能就包含的靶心,只是没有办法找到确切的靶心在哪,但足够多的实验,就可能得到真正的。
在这里插入图片描述

偏差v.s.方差

将误差拆分为偏差和方差。图下左边的靶子表示的是简单模型,右边表示的是复杂模型。红色的线表示随着模型越来越复杂,瞄的越来越准(bias越来越小)绿色的线表示越来越分散(variance越来越大),结合考虑得到蓝色的线。简单模型(左边)是偏差比较大造成的误差,这种情况叫做欠拟合,而复杂模型(右边)是方差过大造成的误差,这种情况叫做过拟合。
在这里插入图片描述
在这里插入图片描述

怎么判断是过还是欠

分析

如果模型都不能拟合训练集中的数据,就是偏差过大,就是欠拟合。如果模型能在训练集上有很好的拟合,但是在测试集上得到大的错误,就说明模型方差比较大,是过拟合。

偏差大-欠拟合

此时应该重新设计模型。因为之前的函数集里面可能根本没有包含 f ^ \hat f f^。可以:
将更多的feature加进去,比如考虑高度重量,或者HP值等等。 或者考虑feature的更多次幂的模型。 如果此时强行再收集更多的data去训练,这是没有什么帮助的,因为设计的函数集本身就不好,再找更多的训练集也不会更好。而且bias大的模型,对数据集的变化也不敏感,就是说受训练集的影响小。
在这里插入图片描述

方差大-过拟合

  1. 简单粗暴的方法:更多的数据
    但是很多时候不一定能做到收集更多的data。可以针对对问题的理解对数据集做调整。比如识别手写数字的时候,偏转角度的数据集不够,那就将正常的数据集左转15度,右转15度,类似这样的处理。
  2. 正则化:
    但是可能会影响bias,进而影响space,导致有可能不能包含 f ^ \hat f f^
    在这里插入图片描述

模型选择

用训练集训练不同的模型,然后在测试集上比较错误,模型3的错误比较小,就认为模型3好。但实际上这只是你手上的测试集,真正完整的测试集并没有。比如在已有的测试集上错误是0.5,但有条件收集到更多的测试集后通常得到的错误都是大于0.5的。
在这里插入图片描述

交叉验证

在这里插入图片描述
图中public的测试集是已有的,private是没有的,不知道的。交叉验证 就是将训练集再分为两部分,一部分作为训练集,一部分作为验证集。用训练集训练模型,然后再验证集上比较。确实找出最好的模型之后(比如模型3),再用全部的训练集训练模型3再得到一个function,然后再用public的测试集进行测试,此时一般得到的错误都是大一些的,但是能真正反映这个function在private testing data上的表现(为什么呢)。
不过此时会比较想再回去调一下参数,调整模型,让在public的测试集上更好,但不太推荐这样。这种技术的一个要点是在得到最终模型前不能以任何方式分析或使用测试集。一个常见错误是在效果评估后重新调整模型然后再次训练评估。如果在一次建模中你重复使用一份测试集,这份测试集就被污染了。由于测试集参与了模型调整,它就不能再给出模型误差的一个无偏估计了。------引用自百度百科(不懂这个解释在说什么)
上述方法可能会担心将训练集拆分的时候分的效果比较差怎么办,可以用下面的方法。

N-折交叉验证

将训练集分成N份,比如分成3份。然后再在三种情景下,分别对model1、2、3做训练。然后将model1、2、3在三种情景下的error取均值来进行比较,同样这样也能得到一个public testing set和private testing set上error差距比较小的结果。比如在三份中训练结果Average错误是模型1最好,再用全部训练集训练模型1。
在这里插入图片描述

参考:LeeML-Notes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值