一、什么是偏差和方差

  1. 偏差(Bias):结果偏离目标位置;
  2. 方差(Variance):数据的分布状态,数据分布越集中方差越低,越分散方差越高;
  • 在机器学习中,实际要训练模型用来解决一个问题,问题本身可以理解为靶心,而模型就是子弹,则子弹呈现在靶子上弹孔位置就可能出现偏差和方差的情况,也就是说训练出的模型可能犯偏差和方差两种错误;

二、 模型误差

  • 模型误差 = 偏差(Bias) + 方差(Variance) + 不可避免的误差

 1)不可避免的误差

  • 无能为力的、客观存在的、由于各种各样的原因导致的误差,是无论怎么改进算法和模型都无法避免的;如采集的数据本身含有的噪音。
  • 偏差和方差是和算法及模型的相关问题。

 2)产生偏差和方差的原因

  • 产生偏差的原因
  1. 可能对问题本身的假设不正确;如非线性数据或问题使用线性回归算法。
  2. 欠拟合(underfitting)会产生偏差;
  3. 如果训练数据采用的特征跟问题的相关性不强或者根本没有相关性,就会使模型的预测结果偏离真实的结果。
  • 方差产生的原因
  1. 方差在机器学习中的表现为,数据的一点点扰动都会较大的影响模型,换句话说,模型没有完全学习到问题的实质,而学习到了很多噪音;
  2. 模型太复杂,如高阶的多项式回归;
  3. 过拟合(overfitting)会产生方差;

 3)高方差的算法

  • 有一些算法天生就是高方差的算法;
  1. 如 kNN,因为 kNN 有一个很大的缺点,对数据太敏感,因为模型每次都得找离被预测的样本最近的几个样本,让它们进行投票,但是这最近的几个样本一旦多数错误的结果,则导致预测的结果不准确。
  • 一般非参数学习的算法都是高方差的算法
  1. 因为这类算法不对数据进行任何假设,只能根据现有数据进行预测,因此它对训练数据的准确度依赖性比较高。换句话说,该类算法对训练数据比较敏感。(如 kNN、决策树)

 4)高偏差的算法

  • 有一些算法天生是高偏差的算法;

  1. 如线性回归,因为现实生活中很多问题可能不是线性关系,但如果非要使用线性手段拟合这些数据或问题,则会得到错误的结果,这类错误通常都是偏差错误。
  • 一般参数学习的算法都是高偏差的算法,因为该类算法对数据具有极强的假设。
  • 参数学习算法:将整个问题规约成一个数学模型,只需要求出该数学模型的参数即可。
  1. 规约成数学模型的前提是对问题或数据进行假设,认为数据或问题的规律符合该数学模型,但是一旦数据或问题不符合该数学模型,也就是假设是错误的,会导致模型也是错误的,这种错误通常都是高偏差的错误。

三、解决模型误差

 1)机器学习算法中,大多数算法具有相应的参数,可以通过调参来调整模型的偏差和方差

  •  kNN 算法
  1. 对 k 的调整,其实就是在调整算法模型中引入的偏差和方差的错误,k 越小模型越复杂,相应的模型的方差越大偏差越小;k 越大模型越简单,直到 k 达到最大值(样本总数),此时 kNN 算法的本质就是看全部样本中哪类样本最多,就将此类样本的类型作为预测结果,这种情况下 kNN 算法的模型的方差最小偏差最大。
  • 线性回归中使用多项式回归
  1. 调整参数 degree,可改变线性回归算法模型的方差和偏差的误差。degree 越小模型越简单,模型的偏差越大方差越小;degree 越大模型越复杂,模型方差越大偏差越小。

 2)调整模型的偏差和方差

  • 通常在一个机器学习算法中,偏差和方差是矛盾的,降低偏差就会提到方差,降低方差就会提高偏差,一般需要找到一个平衡;
  • 如果一个算法模型的偏差和方差都较低,则算法本身可能存在错误,因为通常大部分情况下都不会这么理想。此时需要观察算法的主要错误是集中在偏差位置还是方差位置,并且要尝试使偏差和方差能不能达到平衡;换句话说,不要太高的方差,因为此情况下模型的泛化能力较弱;也不要太高的偏差,因为此情况下模型太过偏离原问题。
  • 有时,可能不能完全杜绝错误,但让模型有一点偏差也有一点方差,而不是模型的错误集中在一个方面;通常在机器学习中,将模型调整到此种状态也是在对模型调参时要做的一个主要的事情。
  • 机器学习领域的主要挑战,来自于方差:

  1. 此说法只局限在算法的层面上,在问题的层面上不一定是这种情况。因为现实中人们还对很多问题的理解太过肤浅,比如对疾病和金融市场的理解。
  2. 如,过去很多人尝试用历史的金融数据来预测未来的金融情况,通常预测的结果不够理想,很有可能历史的金融数据并不能很好的反应未来金融市场的走向,因此此种方法会带来很高的偏差。
  • 现实中解决过拟合是很多算法工程师要解决的问题;

 3)解决高方差的通常手段

  • 1)降低模型复杂度
  1. 如多项式回归中,可通过较小 degree 来降低模型复杂度;
  • 2)减少数据维度;降噪
  1. 方差过大的大部分原因是模型学习的过多的噪音;
  • 3)增加样本数
  1. 也就是增大训练数据的规模:有时候算法具有高的方差,是因为模型太过复杂,模型中的参数非常多,而训练模型的样本数不足以支撑计算出这么多复杂的参数。(如:神经网络和深度学习)
  2. 使用深度学习的一个非常重要的条件就是数据样本的规模必须足够的大,这样才能发挥深度学习算法的效用,其中的原因就是深度学习算法的模型太过复杂,模型中的参数非常多,而训练模型的样本数不足以支撑计算出这么多复杂的参数。否则的话,使用深度学习的算法在一个小样本上得到的结果,还不如使用简单的模型得到的结果。

    

  • 4)使用验证集
  1. 在评测算法模型指标时需要使用 验证数据集(Validation),因为如果只使用 train_test_split 的方法得到的模型很有可能出现过拟合测试数据集的情况。

    

  • 5)模型的正则化

机器学习:偏差方差权衡(Bias Variance Trade off)的更多相关文章

  1. 【笔记】偏差方差权衡 Bias Variance Trade off

    偏差方差权衡 Bias Variance Trade off 什么叫偏差,什么叫方差 根据下图来说 偏差可以看作为左下角的图片,意思就是目标为红点,但是没有一个命中,所有的点都偏离了 方差可以看作为右 ...

  2. 偏差和方差以及偏差方差权衡(Bias Variance Trade off)

    当我们在机器学习领域进行模型训练时,出现的误差是如何分类的? 我们首先来看一下,什么叫偏差(Bias),什么叫方差(Variance): 这是一张常见的靶心图 可以看左下角的这一张图,如果我们的目标是 ...

  3. 训练/验证/测试集设置;偏差/方差;high bias/variance;正则化;为什么正则化可以减小过拟合

    1. 训练.验证.测试集 对于一个需要解决的问题的样本数据,在建立模型的过程中,我们会将问题的data划分为以下几个部分: 训练集(train set):用训练集对算法或模型进行训练过程: 验证集(d ...

  4. 机器学习算法中的偏差-方差权衡(Bias-Variance Tradeoff)

    简单的以下面曲线拟合例子来讲: 直线拟合后,相比原来的点偏差最大,最后一个图完全拟合了数据点偏差最小:但是拿第一个直线模型去预测未知数据,可能会相比最后一个模型更准确,因为最后一个模型过拟合了,即第一 ...

  5. [转]理解 Bias 与 Variance 之间的权衡----------bias variance tradeoff

    有监督学习中,预测误差的来源主要有两部分,分别为 bias 与 variance,模型的性能取决于 bias 与 variance 的 tradeoff ,理解 bias 与 variance 有助于 ...

  6. Bias/variance tradeoff

    线性回归中有欠拟合与过拟合,例如下图: 则会形成欠拟合, 则会形成过拟合. 尽管五次多项式会精确的预测训练集中的样本点,但在预测训练集中没有的数据,则不能很好的预测,也就是说有较大的泛化误差,上面的右 ...

  7. 机器学习总结-bias–variance tradeoff

    bias–variance tradeoff 通过机器学习,我们可以从历史数据学到一个\(f\),使得对新的数据\(x\),可以利用学到的\(f\)得到输出值\(f(x)\).设我们不知道的真实的\( ...

  8. Andrew Ng机器学习编程作业:Regularized Linear Regression and Bias/Variance

    作业文件: machine-learning-ex5 1. 正则化线性回归 在本次练习的前半部分,我们将会正则化的线性回归模型来利用水库中水位的变化预测流出大坝的水量,后半部分我们对调试的学习算法进行 ...

  9. [DeeplearningAI笔记]改善深层神经网络1.1_1.3深度学习使用层面_偏差/方差/欠拟合/过拟合/训练集/验证集/测试集

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.1 训练/开发/测试集 对于一个数据集而言,可以将一个数据集分为三个部分,一部分作为训练集,一部分作为简单交叉验证集(dev)有时候也成为验 ...

随机推荐

  1. oracle 序列改值

    1.oracle 序列改值 执行:Alter Sequence SQ_RM_FRAME Increment By 100; 执行:Select SQ_RM_FRAME.NextVal From Dua ...

  2. Windows batch: call more than one command in a FOR loop?

    https://stackoverflow.com/questions/2252979/windows-batch-call-more-than-one-command-in-a-for-loop U ...

  3. Java properties配置文件工具类

    /* * Copyright (c) 2017. Panteng.Co.Ltd All rights reserved */ import org.apache.log4j.Logger; impor ...

  4. springcloud一些概念知识

    1.Eureka 1)Eureka服务治理体系支持跨平台 2)三个核心概念:服务注册中心.服务提供者以及服务消费者 3)服务续约:注册完服务之后,服务提供者会维护一个心跳来不停的告诉Eureka Se ...

  5. HDU 5037 Frog(2014年北京网络赛 F 贪心)

    开始就觉得有思路,结果越敲越麻烦...  题意很简单,就是说一个青蛙从0点跳到m点,最多可以跳l的长度,原有石头n个(都仅表示一个点).但是可能跳不过去,所以你是上帝,可以随便在哪儿添加石头,你的策略 ...

  6. Ant入门

    一.Ant介绍 Ant是Java的生成工具,是Apache的核心项目:直接在apache官网下载即可: Ant类似于Unix中的Make工具,都是用来编译.生成: Ant是跨平台的,而Make不能: ...

  7. JMeter设置Http代理对web或者app进行录制

    一.录制web 1.首先保证JMeter的安装环境都正确.启动JMeter:在安装路径的bin目录下双击jmeter.bat (例如:D:\apache-jmeter-2.13\bin) ​2.打开J ...

  8. html5学习笔记(audio)

    来源于<HTML5高级程序设计> audio api <audio controls> controls告诉浏览器显示播放控件 不指定 type 浏览器自解 oggMP3 ty ...

  9. Microsoft SQL Server for Linux安装和配置

    虽说mssql for linux早已经出来了,但原本没有打算这么早就去尝试的,无奈之下还是得先尝试用了,这里分几篇介绍我在用mssql for linux时遇到的问题,不得不说作为先吃螃蟹的人总是要 ...

  10. ThreadPool(线程池)

    WPF使用ThreadPool.QueueUserWorkItem线程池防界面假死 时间:2012-01-09 20:44来源:http://luacloud.com 作者:luacloud 点击:1 ...