前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习入门 8-7 偏差方差平衡

机器学习入门 8-7 偏差方差平衡

作者头像
触摸壹缕阳光
发布2020-01-14 15:56:18
8660
发布2020-01-14 15:56:18
举报

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍什么是偏差和方差,并从偏差和方差这种更高更全面的视角来探讨模型过拟合和欠拟合,最后提出在算法层面上主要解决高方差,并提出五条解决高方差的手段。

1

方差和偏差

在之前几个小节中,主要介绍了在进行机器学习模型训练的过程会遇到Overfitting和Underfitting,也就是过拟合和欠拟合的问题。这些问题都会使训练的机器学习模型在真实的预测过程中产生各种误差或者错误。

这一小节,将从一个更高的视角上更加全面的看一下,在机器学习这个领域中,当训练一个模型的时候出现误差,我们应该怎样对其进行分类,这就是偏差和方差的权衡(Bias Variance Trade off),其中偏差为Bias方差为Variance。

那什么是偏差什么是方差呢???

  1. 偏差:可以看上图位于左下角的图片。我们的目标在中心红点的位置,上面蓝色的点为打靶的结果,可以发现蓝色打靶的点都偏离了这个中心位置,这种情况就叫做高偏差。偏差描述的是蓝色打靶点是否偏离了红色中心点;
  2. 方差:可以看上图位于右上角的图片。同样我们的目标在中心红点的位置,打靶的蓝色点看起来都围绕着红色中心点的周围。"此时根据偏差的定义,可以判断出此时没有太大的偏差",但是整体而言这些蓝色的点太过分散不集中,所以此时拥有高的方差。方差描述的是蓝色打靶点是否分散;

据此了解了偏差和方差,具体再来看上面的图。看最上面两个打靶的结果,蓝色点都围绕着红色中心点周围,相当于就是低偏差,也就是没有偏差。

  • 最上面左边图没有偏差,蓝色点整体都围绕着红色中心点周围,同时也没有方差,蓝色点集中的在红色的区域中;
  • 最上面右边图虽然没有偏差,蓝色点整体都围绕着红色中心点周围,但是却有高的方差,因为这些蓝色点虽然整体围绕着红色中心点,但是比较分散。

最下面两张图都有非常高的偏差。

  • 最下面左边的图有高的偏差,因为蓝色点偏离了红色中心点,但是此时的方差比较低,因为蓝色点相对而言比较集中不分散,换句话说他只是偏了而已;
  • 最下面右边的图既有高的偏差又有高的方差,因为此时蓝色点不仅偏离了红色中心点(高偏差),而且这些蓝色点比较分散(高方差)。

将打靶与进行机器学习的过程进行类比,实际要训练模型目的都是要预测一个问题,这个问题本身就可以理解成靶子的中心(红色中心点),而根据数据来拟合模型,进而预测这个问题。拟合的这个模型其实就是我们打出去的这些枪,那么此时模型就有可能犯偏差和方差两种错误,所以一般来说当我们训练一个模型的时候,这个模型就会有误差。这个误差通常来源于三个方面。

这三个方面的误差就是偏差、方差以及不可避免的误差,所谓不可避免误差,顾名思义就是对于这部分误差,我们无能为力,它是由各种各样的原因所导致的。最典型的例子就是采集到的数据本身具有噪音,这是无论我们如何改进模型或改进算法都不可避免的。但是偏差和方差这两个问题,确实是和训练模型以及算法相关的两个问题。

  • 当训练一个模型的时候,模型产生偏差的主要原因。

很有可能对当前问题来说,本身的假设是不正确的。最典型的例子就是如果我们针对非线性数据或者非线性的问题,使用诸如线性回归这种线性方法的话,显然会产生非常高的偏差,那么在现实的环境中欠拟合就是这样的一个例子。由于训练的这个算法对于整个数据来说是欠拟合,所以导致模型具有非常高的偏差。当然带来高的偏差,还有其他的可能性,另外一个典型的例子就是训练数据所采用的特征,如果这个特征和要解决的问题完全没有关系,比如说如果想要预测一个学生的考试成绩,我们用学生的名字作为特征来预测成绩,那么很显然一定是高偏差的,因为姓名这个特征与预测成绩之间是高度不相关的。不过对于这个课程中主要介绍的是机器学习算法而不是讨论特征选取的问题,所以在算法层面上欠拟合是导致偏差最主要的原因。

  • 当训练一个模型的时候,模型产生方差的主要原因。

对于方差这个错误,在机器学习的过程中表现在于数据的一点点扰动都会极大的影响模型,换句话说模型没有完全学习到解决问题的实质(红色中心点),而是学习到了很多噪音。通常来讲模型具有较高的方差是因为模型太过复杂。比如在这一章介绍的高阶多项式回归,Overfitting会极大的引入方差。

2

偏差方差与算法

理解了偏差和方差的概念之后,来看一看目前学过的机器学习算法中那些算法天生就是高偏差,那些算法天生就是高方差。

  1. 在之前介绍kNN算法的时候,介绍过kNN算法有一个比较大的缺点,就是对数据特别敏感,因为每次kNN都去找离要预测样本最近的几个样本,然后对找到的这些样本进行投票。但是距离预测样本近的这几个样本一旦多数是错误的结果,那么整个模型的预测就不准确了,这就是一个高方差的算法。通常来讲,非参数学习的算法都是高方差的算法,因为这类算法不对数据进行任何的假设,只能够根据我们现有的训练数据来进行相应的预测,所以模型对训练数据集本身是非常敏感的。在第二章介绍算法分类的时候,介绍过什么是非参数学习的算法,kNN算法就是一个典型的非参数学习算法,使用kNN算法进行预测的时候是高度依赖训练的样本数据,而不完全依赖某些特定的参数。在后面还会继续介绍这样的算法决策树,决策树也是一种典型的非参数学习算法,这类算法通常很有可能引入更高的方差;
  2. 另外一类算法天生是高偏差的算法,最典型的例子就是线性回归,因为现实生活中的很多问题都是非线性的,但是如果我们非要使用线性的手段去解决这些问题的话,那么得到的结果就会产生错误,这些错误就是偏差错误。更进一步,通常的参数学习都是高偏差的算法,参数学习这个概念可以规约成一个数学模型,对于这个数学模型,我们只需要求出这个模型相应的参数就好了,那么在这样的情况下,相当于对数据整体有很强的假设,我们认为这些数据是符合这个数学模型的,可是一旦这些数据或者这个问题不符合这个数学模型,也就是说我们的这个假设是错误的,训练出来的模型就会带来错误,这种错误通常都是高偏差错误。

在我们学习的大多数机器学习算法中,通常都有相应的参数,可以通过参数来调整偏差和方差。

  1. 对kNN算法超参数k进行调整,其实就是在调整kNN算法模型中的偏差和方差错误。
    1. 当k值越小的话,说明模型越复杂,相应模型的方差越大偏差越小;
    2. 当k值越大的话,说明模型越简单,直到k值达到最大值也就是k等于样本总数的时候,此时kNN算法的本质就是看全部样本中,哪一种样本多就预测谁,在这种情况下达到kNN算法的偏差最大方差最小;
  2. 线性回归当我们引入多项式回归的时候,就可以调整多项式回归的超参数degree阶数,调整degree将改变线性回归算法相应偏差和方差。
    1. degree阶数值越小,最低的时候为1,那么此时模型越简单,因此模型相应的偏差就会越大;
    2. degree阶数值越大,通过多项式回归拟合出来的曲线就越弯曲,也就是模型更加复杂,此时模型的方差就会越来越大;

通过上面的分析描述也可以看出来,偏差和方差这两种错误,它们是相互矛盾相互制约的。

通常在一个机器学习算法中,降低偏差就会提高方差,而降低方差就会提高偏差,通常我们需要找到一个平衡。如果我们训练出来的模型,通过实践发现他是一个低偏差低方差的模型,那固然非常好,可是在实际情况下并不会这么理想,我们会发现算法本身是具有错误的,在这个时候需要通过观察来看算法主要的错误到底是集中在偏差的位置还是方差的位置,看看能不能让模型的偏差和方差达到一定的平衡。换句话说,模型没有特别高的方差,因为在这种情况下,模型的泛化能力太差了,也不能有特别高的偏差,因为在这种情况下,模型太偏离这个问题了。我们可能不能让模型完全杜绝错误,但是让模型有一点偏差,也有一点方差,而不是集中在某一个方向上,那么达成这个目标通常就是机器学习算法在调参过程中要做的一个主要的事情。

3

主要挑战方差以及解决高方差主要手段

在机器学习领域主要挑战来自于方差而不是偏差。当然对于这个说法,其实仅仅局限在算法层面上,在问题的层面上不一定主要挑战是方差,因为我们对于很多问题的理解太过肤浅,比如对于疾病的理解,还比如说对金融市场的理解,在过去很多人都尝试过使用历史的金融数据来预测未来的金融情况,这些预测的结果通常都不是很理想,很有可能因为历史的金融数据本身并不能非常好的反映未来的金融走向,那么这种预测方法本身带来的非常高的偏差,当然这依然是特征选择的范畴,不是课程的重点。

在这个课程中,假设我们此时已经有了相对比较好的数据,数据也有相对比较好的特征,在这种情况下,问题的关键是使用算法来基于这些数据得到可靠的结果,此时我们的主要挑战大多数来自于方差。换句话说,我们可以很容易让模型变的非常复杂,也就是让模型的偏差非常的低,但是这样的模型具有非常高的方差,因此模型的泛化能力很差,最终也没有很好的性能表现。所以我们很可能经常听到,Overfitting也就是解决过拟合的问题是很多机器学习工程师都要面临的问题,那么如果面对过拟合问题,也就是模型具有很高的方差,此时该如何去解决呢???

通常有下面几种手段来解决模型高方差,也就是解决模型过拟合的手段。

  1. 最典型的手段就是降低模型的复杂度。如果degree值设置为100,此时多项式回归得到的结果显然过拟合了,也就是高方差,如果我们让degree阶数值降低,这样一来就能够降低模型整体的复杂度,也就减少了方差;
  2. 减少数据的维度。减少数据的维度通常和降噪联系在一起,之前介绍PCA算法的时候说PCA是一种降维的算法,同时它还有一个副作用,在很多时候会降低数据的噪声。而产生方差这种错误,很多时候是由于模型学习到数据中的噪音,通过减少数据维度进而进行降噪的手段能够有效的减小算法模型相应的方差;
  3. 增加样本数。增加样本数也就是增大训练数据的规模,有一些时候我们的算法具有高的方差是因为模型太过复杂,模型中的参数非常非常多,而此时的样本数不足以支撑计算出这么多的复杂参数,可以联想计算方程式组的时候参数与方程的关系。其实神经网络或者深度学习就是一个最典型的例子,在使用深度学习的时候一个非常重要的条件就是你的数据规模要足够的大,只有在这种情况下深度学习模型才能发挥它的效用,其实就是这样一个原理,否则的话很有可能我们使用深度学习的模型在一个小样本上得到的结果,还不如我们使用这些简单机器学习模型最终的效果;
  4. 使用验证集。在上一小节中介绍了在评测算法指标的时候需要使用验证集,如果使用train_test_split的话,很有可能训练出来的模型针对测试数据集过拟合;
  5. 对于解决方差,还有一种非常重要的手段,这种手段有一个专业术语也就是模型的正则化,接下来三个小节就会具体介绍一些模型正则化的方法,对于一些算法来说,比如接下来要介绍的逻辑回归或者下一章要介绍的SVM算法,这些算法离不开模型正则化。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档