李宏毅2020机器学习课程笔记-误差的来源/交叉验证

1、误差的来源

了解error的来源其实是很重要的,因为我们可以针对它挑选适当的方法来improve自己的model,提高model的准确率,而不会毫无头绪。
在这里插入图片描述
y ^ \widehat{y} y 表示那个真正的function,而 f ∗ f^* f表示这个 f ^ \widehat{f} f 的估测值 estimator。

就好像在打靶, f ^ \widehat{f} f 是靶的中心点,收集到一些data做training以后,你会得到一个你觉得最好的function即 f ∗ f^* f,这个 f ∗ f^* f落在靶上的某个位置,它跟靶中心有一段距离,这段距离就是由Bias和variance决定的。

bias(偏差)和variance(方差 )实际上对应着物理实验中系统误差和随机误差的概念,假设有n组数据,每一组数据都会产生一个相应的 f ∗ f^* f,此时bias表示所有 f ∗ f^* f的平均落靶位置和真值靶心的距离,variance表示这些 f ∗ f^* f的集中程度。
这里我们利用了抽样分布的理论,利用估测值的均值和方差来反映真实值。
下图是对我们引入概念的视觉解释:
在这里插入图片描述
上图结合了我们讲解宝可梦的案例分析时,不同模型的韦恩图表示。

  • 在模型较为简单的情况下,我们在打靶的时候视野是非常小的,视野范围可能根本就没有包含我们的targe,这就很容易导致打靶打偏(bias偏大),但是每次打的都会相对集中(variance偏小)。
  • 在模型相对复杂的情况下,视野就会变得非常大,那么我们在打击靶心的时候就会相对容易中标(bias偏小),但是每次打的都会相对变得松散(variance偏大)。

由此,比较简单的model,variance比较小,bias比较大;而比较复杂的model,bias比较小,variance比较大。
在这里插入图片描述

如果实际error主要来自于variance很大,这个状况就是overfitting过拟合;如果实际error主要来自于bias很大,这个状况就是underfitting欠拟合(可以理解为,overfitting就是过分地包围了靶心所在的space,而underfitting则是还未曾包围到靶心所在的space)

2、如何针对性地处理bias大 or variance大的情况呢?

1、如果bias比较大

bias大代表,你现在这个model里面可能根本没有包含你的target, f ^ \widehat{f} f 可能根本就不在你的function
set里

对于error主要来自于bias的情况,是由于该model(function
set)本来就不好,collect更多的data是没有用的,必须要从model本身出发

  • 重新设计你的model

    • 增加更多的features作为model的input输入变量

      比如pokemon的例子里,只考虑进化前cp值可能不够,还要考虑hp值、species种类…作为model新的input变量

    • 让model变得更复杂,增加高次项

      比如原本只是linear model,现在考虑增加二次项、三次项…

2、如果variance比较大

  • 增加data * 如果是5次式,找100个 f ∗ f^* f,每次实验我们只用10只宝可梦的数据训练model,那我们找出来的100个 f ∗ f^* f的散布就会像下图一样杂乱无章;但如果每次实验我们用100只宝可梦的数据训练model,那我们找出来的100个 f ∗ f^* f的分布就会像下图所示一样,非常地集中
  • 增加data是一个很有效控制variance的方法,假设你variance太大的话,collect data几乎是一个万能丹一样的东西,并且它不会伤害你的bias *
    但是它存在一个很大的问题是,实际上并没有办法去collect更多的data *
    如果没有办法collect更多的data,其实有一招,根据你对这个问题的理解,自己去generate更多“假的”data
    • 比如手写数字识别,因为每个人手写数字的角度都不一样,那就把所有training data里面的数字都左转15°,右转15°
    • 比如做火车的影像辨识,只有从左边开过来的火车影像资料,没有从右边开过来的火车影像资料,该怎么办?实际上可以把每张图片都左右颠倒,就generate出右边的火车数据了,这样就多了一倍data出来
    • 比如做语音辨识的时候,只有男生说的“你好”,没有女生说的“你好”,那就用男生的声音用一个变声器把它转化一下,这样男女生的声音就可以互相转化,这样data就可以多出来
    • 比如现在你只有录音室里录下的声音,但是detection实际要在真实场景下使用的,那你就去真实场景下录一些噪音加到原本的声音里,就可以generate出符合条件的data了
  • Regularization(正规化)
    • 就是在loss function里面再加一个与model高次项系数相关的term,它会希望你 的model里高次项的参数越小越好,也就是说希望你今天找出来的曲线越平滑越好;这个新加的term前面可以有一个weight,代表你希望你的曲线有多平滑
    • 下图中Regularization部分,左边第一幅图是没有加regularization的test;第二幅图是加了regularization后的情况,一些怪怪的、很不平滑的曲线就不会再出现,所有曲线都集中在比较平滑的区域;第三幅图是增加weight的情况,让曲线变得更平滑
    • 加了regularization以后,因为你强迫所有的曲线都要比较平滑,所以这个时候也会让你的variance变小;但regularization是可能会伤害bias的,因为它实际上调整了function set的space范围,变成它只包含那些比较平滑的曲线,这个缩小的space可能没有包含原先在更大space内的 f ^ \widehat{f} f ,因此伤害了bias,所以当你做regularization的时候,需要调整regularization的weight,在variance和bias之间取得平衡
      在这里插入图片描述
      实际上,通过regularization优化model的过程就是上述的1、2、3步骤,不断地调整regularization的weight,使model的bias和variance达到一个最佳平衡的状态(可以通过error来评价状态的好坏,weight需要慢慢调参),
      正则化会使得bias变大

3、选择模型

我们现在会遇到的问题往往是这样:我们有很多个model可以选择,还有很多参数可以调,比如regularization的weight,那通常我们是在bias和variance之间做一些trade-off权衡

我们希望找一个model,它variance够小,bias也够小,这两个合起来给我们最小的testing data的error

在选择模型时,通常情况下,我们会在training set上训练得到Model1,2,3,之后再testing set上进行测试得到 performance 最好的模型来作为我们最后的选择。但这是最不可取得。
因为,此时你的testing set 并不是真正的testing set,它们之间存在一定的偏差,那么在testing set上得到的结果会稍逊色一些。在这里插入图片描述
那我们应该怎样选择我们的模型?

1. Cross Validation

基本思路是将自己原本的training data分成training set(训练集)validation set(验证集),在training data上做训练,在validation set做选择。也就是说,先拿training set来训练我们决定的3个model,找到他们 f*,再拿validation set来选择误差值最小,performance最好的那个model,最后将这个 model 使用在public testing set上。
在这里插入图片描述
在训练过程中,你可能担心,原本的training set被分成了training setvalidation set两个部分,会比之前的训练数据要少,训练效果会不会不好,我们也可以这样做,把已经从validation set决定model3是最好的model,那就定住model3不变(function的表达式不变),然后把我们之前全部的 training set 再训练一次,得到model4。

通过Cross Validation,我们得到的model apply在public testing set的error是能真正反映private testing set 上的error。

从上图我们可以得到,在public testing set的结果并不好,不建议回过头去重新调整model的参数,因为当你再回去重新调整什么东西的时候,你就又会把public testing set的bias给考虑进去了,这就又回到了第一种情况,即围绕着有偏差的testing datamodel的优化。这样操作使得我们的public testing set 不能真正的去反映 真实的 private testing set,糟糕的是error 会变得更大。因为你本身离我们的真实还挺近的,但是你稍微一调整就使得我们离真实更远了一点,所以最后的结果就会导致error 变大。

Cross Validation 中,我们如何分配全部的training set?担心分不好怎么办?

2.N-flod Cross Validation

如果你不相信某一次分train和validation的结果的话,那你就分很多种不同的样子

在这里插入图片描述
比如说,如果你做3-flod的validation,意思就是你把training set分成三份,每一次拿其中一份当做validation set,另外两份当training;分别在每个情境下都计算一下3个model的error,然后计算一下它的average error;然后你会发现在这三个情境下的average error,是model1最好。

然后接下来,你就把用整个完整的training data重新训练一遍model1的参数;然后再去public testing set上test

原则上是,如果你根据public testing set上的error调整model的次数尽量少时,那你在private testing set上面得到的error往往是比较接近public testing set上的error的。

4、总结:

  • error 是有bias 和 variance 共同影响的
  • bias 和 variance出现问题时分别的处理办法
  • 如何选择模型
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值