李宏毅机器学习三天速成~~~第三课~~~Where does the error come from

error(误差)主要有两个来源:bias(偏差)和variance(方差)

有关bias和variance的介绍可以见链接https://en.wikipedia.org/wiki/Bias–variance_tradeoff

下面简单介绍以下bias和variance

 

 

上图最后一个公式中可以知道当样本中数据量越多,variance越小

其实上面说来说去都不好解释,下面用一张图表示

Bias就是的平均值(样本平均值)偏离实际数据平均值的程度

Variance则是样本点离样本平均值的分散程度。

宝可梦预测实验对Bias与Variance的研究

下面利用不同的样本,每个样本中有10个宝可梦,下图的universes是李老师自己定义的宇宙,其实就是不同样本,用相同的Model去训练得到不同的function

当有100个样本的时候,在不同的Model下得到不同的结果

从上图中可以看出,Model越复杂,得到的function之间越来越分散,即Variance越来越大。为什么呢?因为越简单的Model,受训练数据的影响越小

下面利用该实验研究以下Bias:

是宝可梦升级的实际函数,不是我们训练得到的函数哦,对每个样本在同一Model训练得到的function求平均,见下图

在不同Model下求所有样本训练得到的function平均以及进行对比,得到下图,图中红色的为5000个样本中每个样本训练得到的function,蓝色为function平均,黑色为

从上图中可以看出Model越复杂,function平均即与实际函数越接近,即Bias越小。那么为什么呢?其实复杂的Model是包含简单的Model的,比如:

y=b+{w_{1}}*x等价于y=b+{w_{1}}*x+{0}*x^{}{2}

因为这种包含关系导致Bias随着Model越来越复杂而越来越小

如果还没懂看下面途中Model包含的范围

所以总结以下:Model越复杂,Bias越小,Variance越大,如下图

这里的图中有两个概念Overfitting(过拟合)和Underfitting(欠拟合)

Overfitting在训练数据上拟合的特别好,但是到了测试数据中,就会拟合的特别差。

如何理解呢?看下图(够形象吧):

当Model越来越复杂,就会出现Overfitting,不够复杂又会出现Underfitting,这个在机器学习和深度学习中是个很重要的问题,我会在以后的内容中进行介绍。

如何处理Overfitting,或者高variance的现象呢?

一种方法是增加每个训练样本中的数据量,下面对每个样本使用不同的数据量进行比较:

另一种方法是Regularization(正则化),相关推荐链接:https://www.cnblogs.com/nowornever-L/p/6862320.html

正则化就是对复杂的model的参数加上惩罚项,比如下面一个较复杂的model

y=b+w_{1}*x+w_{2}*x^{2}+w_{3}*x^{3}+w_{4}*x^{4}

比如为了使w_{3}w_{4}尽可能小,从而保证不会过拟合

上图就是Regularization后的效果,使w_{3}w_{4}尽可能小,得到的结果不十分分散。

Model Selection模型选择

在对选择模型时,需要使bias和variance达到一个平衡,使得总误差最小

但是在实际的模型选择时会出现一个问题,那就是在利用testing data对不同model下跑出的结果进行误差计算时,在testing data下计算的误差最小的那一个model在对实际数据进行测试时可能并不是最好的(但是实际的数据又不能在阶段运用到诶),实际数据下计算的误差通常大于testing data下计算的误差

那么如何对上述问题进行处理呢?

这里要引入一个新的概念(方法):cross validation交叉验证

附上交叉验证一个比较好的了解链接:https://www.cnblogs.com/pinard/p/5992719.html

首先将数据分成三部分,training data、validation data和testing data。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。

上图中的public是指你机器学习过程中的testing data,private是实际用到这个模型时的testing data,在机器学习过程中不用到但是呢?当你在public testing data中发现结果不好,不要回头重新对模型进行训练,这是十分不推荐做的,那么当发现testing data上计算出来的误差很不好看的时候该怎么做呢?那就需要重新设计cross validation的方法,怎么设计咩?

这里有一种N-fold Cross Validation方法,将一份training data分成N份,结合下图中解释分成三份,轮流取三份中的一份validation data,另外两份为training data,计算出每种取法下不同model计算得到的误差值。

取平均误差最小的model重新在完整的training data上训练一遍得到最终的function,然后再将该function放到testing data上测试。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值