误差分析_误差百分比计算公式

误差分析_误差百分比计算公式误差分析

大家好,又见面了,我是你们的朋友全栈君。

误差分析

 当我们设计并训练好模型之后,就需要在测试集上进行验证。而当模型在测试集上的效果不佳后,我们就需要从模型在测试集上的误差来源进行分析,进而调整模型。而模型在测试集上的误差主要来自两个方面:偏差(bias)和方差(variance)。

偏差(bias)和方差(variance

   若我们设计的模型为f(x),测试样本为x,yD为样本的标签,y表示样本的真正标签(数据的样本标签并不总是等于真实的样本标签,例如在存在测量等误差),模型在测试样本x上的输出为f(x;D)

 使用样本数相同的不同训练集,对f(x)进行训练,会产生多个不同参数的模型。这些模型对测试样本x进行预测,则f(x;D)为随机变量,这些模型的预测期望为

         误差分析_误差百分比计算公式

   对测试样本产生的方差为

        误差分析_误差百分比计算公式

   模型输出期望与真正标签的的差别即为偏差

          误差分析_误差百分比计算公式

 测样样本的标签和真正标签之间的噪声为

           误差分析_误差百分比计算公式

 假设噪声期望E[y-yD]=0,模型的预测输出和yD的误差为

  误差分析_误差百分比计算公式

  因此有误差可以分解为方差、偏差、噪音;其中噪音是无法进行更正(如在测量身高时会存在一定误差),因此可以从方差和偏差两方面着手。

偏差和方差对误差的影响

   简单的说,偏差代表了预测期望值跟目标值之间的距离,也就瞄不瞄的准;而方差代表的是预测值跟预测期望的波动情况,也就是在确定瞄准目标后,跟瞄准目标的偏离情况。更形象的如图1-1所示

误差分析_误差百分比计算公式 

1-1 方差和偏差

 通常我们希望的是低偏差的低方差,也就是我们瞄准目标之后。也能够射中靶心;但是很多时候却不是这样,高偏差和高方差表示的是并没有瞄准目标,而且射出去还偏离了靶心;

偏差和方差诊断

  已经知道模型的误差由偏差和方差两方面造成的。那么,我们在设计并训练好模型后,应该清楚如何判断我们模型的误差和偏差,并进行模型调整。

偏差诊断

 如果在设计好模型后,并进行模型训练。在确定训练集数据是干净的前提下,如果发现模型一直拟合不了或者拟合之后再训练集上验证结果很糟糕,那么就表示模型的偏差就过大了,也就是我们通常说的欠拟合。

偏差过大处理对策

  •  增加更多的特征
  •  设计更加复杂的模型

方差诊断

   如果在设计并训练好模型之后,模型在训练集上的验证结果很高。但是,在测试集上的结果却很糟糕,那么这就表示模型的方差过大,也就是通常说的欠拟合。

方差过大处理对策

  • 增加训练数据集
  • 增加正则化
  • 减少模型参数

偏差和方差权衡

   如果模型的方差较大,那我们就需要增加模型的平滑性来减低方差。但增加平滑性,也会使得模型的拟合能力降低,从而导致偏差增大;同样,如果偏差较大,我们想减小偏差,那么就需要增加模型的拟合能力,也同样会增加模型的方差。因此,在偏差和方差之间,我们需要去衡量,取一个最佳值。

 误差分析_误差百分比计算公式

1-2 偏差和方差的权衡

模型选择注意事项

不正确的模型选择

 如图1-3所示,将数据集分为两个部分,其中一部分是训练集,另外一部分是测试集。当我们在训练集上完成多个模型训练,就在测试集上进行验证并根据在测试集上的结果对模型进行调整,最终选择在测试集上最好的模型作为结果。

 误差分析_误差百分比计算公式

1-3 不正确的模型选择

 

 上述做法不正确的原因在于,我们发现模型在测试集上的结果并不理想,就会调整模型,使模型在测试集上的表现更好。但是,由于训练集和测试集的数据分布可能会存在区别,因此我们在测试集上进行调整的话,其实是把训练集和测试集的区别进行调整。但是,当我们将模型放在线上,所接触到的数据的分布跟训练集和测试集都有区别,这个时候,模型的整个效果就没有在测试集上表现的那么好。通常还会变差!

交叉验证(Cross Validation

 为了真正体现模型在验证集上的性能,可以采用如图1-4方法进行模型选择。将训练集分为两部分,一部分是训练集(Training Set),一部分是验证集(Validation Set)。在训练集上训练模型,并在验证集上进行验证。当我们确定那一个模型最好之后,将所有数据集在训练一遍。最后在public Testing Set上进行验证,在public Testing Set上的结果可以反映模型真正的性能。并且不要由于public Testing Set上的效果不佳就去调整模型,因为调整训练集跟public Testing Set之间的区别,并不能真正调整跟线上数据的区别。

误差分析_误差百分比计算公式

1-4 交叉验证

N折交叉验证(N-fold Cross Validation

     在图1-4中,将训练集分为两部分后,对于单个模型只进行一次实验验证,可能会存在误差。因此可以进行多个实验,取平均值可能更好地进行评估,如图1-5所示。

 误差分析_误差百分比计算公式

1-5 N折交叉验证

 将所有训练局等分为N分,将其中一份作为验证集,其余为测试集,就可以形成N中训练集和验证集。对于单个模型,分别进行N次试验,取平均值作为最终的验证效果。

 

增加数据的操作

手写识别

 由于每个人手写角度不一样,可以将图片进行旋转15

影像辨识

 手头上只有从左边开过来的火车,而没有右边开过来的火车;你可以将图像进行翻转

语音辨识

 只有男生的你好,没有女生的你好,可以通过变声器开进行处理

自然语言处理

    可以采用翻译软件,将一种语言翻译成为另外一种语言

 

偏差方差降低操作

  • 训练多个模型之后,在进行投票选择最终的预测的话,模型预测效果会有所提升?

  这是因为,采用投票选择最终预测结果的话,也就是所有模型的输出结果都是相同,因此整个误差中的方差也就被缩小。但是,如果采用投票最终选择的结果是错误的话,那么就会增加了偏差的情况。

  • 模型具备更好的平滑性,通常会有更好的效果?

  越简单的模型通常具有更好的平滑性,因此整个模型的波动就更小,对应的方差也更小;而越复杂的模型,由于能够呈现出更复杂的曲线,整个模型的波动就更大,对应的方差也就更大;因此,模型的平滑性是在减少方差上做出响应。

参考资料 

[1]机器学习李宏毅

[2]Understanding the Bias-Variance Tradeoff

[3]《机器学习》周志华

转载于:https://www.cnblogs.com/MrPan/p/9484033.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107361.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • unix grep命令_grep命令实例

    unix grep命令_grep命令实例grep一般格式为:grep[选项]基本正则表达式[文件]这里基本正则表达式可为字符串。单引号双引号在grep命令中输入字符串参数时,最好将其用双引号括起来。在调用模式匹配时,应使用单引号。 例如:“mystring”。这样做有两个原因

    2022年8月30日
    7
  • pycharm和Anaconda环境下安装pygame「建议收藏」

    pycharm和Anaconda环境下安装pygame「建议收藏」pycharm和Anaconda环境下安装pygamewindows系统下安装windows系统下安装1.点击windows键打开Anacondaprompt2.打开之后输入condalist可以找到pip3.然后继续输入condainstallpip等安装完成4.pip安装完成之后输入pipinstallpygame如图所示安装成功。…

    2022年8月29日
    5
  • hibernateTemplate update 只更新被修改字段

    hibernateTemplate update 只更新被修改字段如果你用hibernateTemplate操作数据库,感觉的确很省代码,一行代码解决数据库增改删查,但当你做到一个功能只更新一个字段,你就有点懵逼了,怎么试就是不行,总的就是下面的异常报错。当你用hibernateTemplate模板去update或者saveOrUpdate某个对象的时候发现报某字段不能为空的异常,而你的封装对象属性里却实做了某字段的修改,一时就蒙了。其实也不难发现,一…

    2022年6月29日
    27
  • 进程、线程和协程之间的区别和联系

    进程、线程和协程之间的区别和联系一、进程  进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。【进程间通信(IPC)】:管道(Pipe)所有的POSIXsystems,Windows;命名管道(FIFO)所有的POSIX系统…

    2022年7月27日
    3
  • Java BigDecimal详解

    Java BigDecimal详解1.引言       借用《EffactiveJava》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。 2.BigD

    2022年6月7日
    38
  • 非常好的Ansible入门教程(超简单)

    非常好的Ansible入门教程(超简单)Ansible是一个配置管理和配置工具,类似于Chef,Puppet或Salt。这是一款很简单也很容易入门的部署工具,它使用SSH连接到服务器并运行配置的任务,服务器上不用安装任何多余的软件,只需要开启ssh,所有工作都交给client端的ansible负责。关于Ansible的一个好处是,将bash脚本转换为可执行任务是非常容易的。我们可以编写自己的配置程序,但是Ansible更加干净,因为它

    2022年6月3日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号