zoukankan      html  css  js  c++  java
  • 关于偏差-方差的分析

    偏差: 是指一个模型的在不同训练集上的平均性能和最优模型的差异,可以用来衡量一个模型的拟合能力。换句话说,偏差反映的是预测值期望(E(f(x)))真实值(y)之间偏移了多少;

    方差: 是指一个模型在不同训练集上的差异,可以用来衡量一个模型是否容易过拟合。换句话说,方差衡量的是模型自身的稳定性,就是说模型每次输出都会有或大或小的抖动,方差反映的是(f(x))(E(f(x)))之间的差别是否稳定;

    噪声: 表达了当前任务上任何学习算法所能达到的期望泛化误差的下界,也就是最小值;

    泛化误差: 可以分解为 偏差、方差和噪声之和。

    泛化性能是由学习算法的能力、 数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务为了取得较好的泛化性能,则需要偏差较小,即能充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。


    当模型表现不佳时?通常出现两种问题,一种是高偏差问题,另一种是高方差问题。

    以下图中给出了机器学习算法的偏差和方差的四种不同组合情况。每个图的中心点为最优模型f∗(x),蓝点为不同训练集D上得到的模型 fD(x) 。

    ![](https://img2018.cnblogs.com/blog/1705340/201906/1705340-20190605001440157-2058330889.png)

    上图所示为偏差和方差的四种组合:

    (a)低方差-低偏差:理想情况;

    (b)低方差-高偏差:模型泛化能力很好,但拟合能力不足;

    (c)高方差-低偏差:模型拟合能力很好,但泛化能力较差;

    (d)高方差-高偏差:最差情况。

    就像打把一样,偏差描述了射击总体是否偏离目标,而方差描述射击准不准。


    方差一般会随着训练样本的增加而减少。当样本足够多时,方差比较少,可以选择能力强的模型来减少偏差。然而在很多机器学习任务上,训练集往往比较有限,最优的偏差和最优的方差就无法兼顾。

    随着模型复杂度的增加,模型的拟合能力增强,偏差减小而方差增大,从而导致过拟合。以结构错误最小化为例,可以通过调整正则化系数 (lambda) 来控制模型的复杂度。

    (lambda) 增大时,模型复杂度降低,方差减小而偏差上升,从而避免过拟合。

    (lambda) 过大时,总的期望错误反而会上升。

    因此,一个好的正则化系数需要在偏差和方差之间取得较好的平衡。如下图1所示,最优模型并不一定是偏差曲线和方差曲线的交点。

    ![](https://img2018.cnblogs.com/blog/1705340/201906/1705340-20190605001517477-900112030.png)

    图1:《神经网络与深度学习》插图

    方差和偏差之间存在此消彼长的关系,方差和偏差是不能同时达到最小的。

    此外,在《机器学习》中,有下图2,周志华老师给了以下解释:

    (1)当训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;

    (2)随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动逐渐被学习器学到,方差逐渐主导了泛化错误率;

    (3)在训练程度充足后,学习器的拟合能力已经非常强,训练数据的轻微扰动都会导致学习器发生显著变化,若训练数据自身的,非全局的特性被学习器学习到了,则将发生过拟合。

    ![](https://img2018.cnblogs.com/blog/1705340/201906/1705340-20190609223529669-1932723310.png)

    图2:《机器学习》插图


    我们训练一个模型的最终目的是为了让这个模型在测试数据上拟合效果好,也就是(Error(test))比较小,但在实际问题中,无法得到测试数据,也就根本不知道测试数据的内在规律(如果知道了,还要机器学习做什么?),所以需要通过一定策略来减小(Error(test)),分两步:

    (1)让(Error(train))尽可能小;

    (2)让(Error(train))尽可能等于(Error(test))

    怎么让(Error(train))尽可能小呢?(longrightarrow) 把模型复杂化,参数增多(longrightarrow) low bias

    怎么让(Error(train))尽可能等于(Error(test)) (longrightarrow) 把模型简单化,参数减少。(Error(train))=(Error(test))代表模型没有偏见,对训练集和测试集一视同仁,也就是模型更具有通用性,对局部数据不敏感,那就是简单的模型(longrightarrow) low variance

    对于高偏差问题,我们一般采取:

    (1)更加复杂的模型

    (2)增加训练时间

    对于高方差问题,我们一般采取:

    (1)更多的训练数据

    (2)正则化

    在目前的大数据时代和深度学习算法不断进步的今天,只要我们训练一个更大的神经网络,准备更多的训练数据,就可以解决以上问题。可以做到仅仅较小方差或者偏差,而不对另一方产生过多影响,也就是方差和偏差的相关性减弱了。这也是深度学习中不必太关注偏差-方差权衡的原因。

    Reference:

    1. 邱锡鹏老师的《神经网络与深度学习》
    2. 吴恩达老师的《深度学习》课程
    3. 周志华老师的《机器学习》
    4. 什么是偏差-方差权衡
    5. 从机器学习算法合理性的角度解释方差和偏差
    6. 知乎用户修宇亮的答案
  • 相关阅读:
    java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport
    project configuration is not up-to-date with pom.xml
    消息列队5
    消息列队4
    消息列队3
    聊聊常见的数据库架构设计方案?
    消息队列2
    消息队列1
    搜索引擎5
    搜索引擎4
  • 原文地址:https://www.cnblogs.com/xxxxxxxxx/p/10975281.html
Copyright © 2011-2022 走看看