zoukankan      html  css  js  c++  java
  • 偏差方差分解

    偏差方差分解 (误差分解)

    先引入一个问题: Machine Learning 与 Curve Fitting 的区别是什么?[1]

    Curve Fitting 是使用所有的数据拟合一条曲线; 而 Machine Learning 是采用真实世界中采样的一小部分数据,并且我们希望我们的模型能够对于未知数据有不错的泛化性能.因此涉及到Bias-Variance的权衡.

    学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 在估计学习算法性能的过程中, 我们主要关注偏差与方差. 因为噪声属于不可约减的误差 (irreducible error).

    下面来用公式推导泛化误差与偏差与方差, 噪声之间的关系.

    符号 涵义
    (mathbf{x}) 测试样本
    (D) 数据集
    (y_{D}) (mathbf{x}) 在数据集中的标记
    (y) (mathbf{x}) 的真实标记
    (f) 训练集 (D) 学得的模型
    (f(mathbf{x}; D)) 由训练集 (D) 学得的模型 (f)(mathbf{x}) 的预测输出
    (ar{f}(mathbf{x})) 模型 (f)(mathbf{x})期望预测 输出

    泛化误差

    以回归任务为例, 学习算法的平方预测误差期望为:

    egin{equation}
    Err(mathbf{x}) = Eleft[left( y - f(mathbf{x}; D) ight)^2 ight]
    end{equation}

    方差

    在一个训练集 (D) 上模型 (f) 对测试样本 (mathbf{x}) 的预测输出为 (f(mathbf{x}; D)), 那么学习算法 (f) 对测试样本 (mathbf{x})期望预测 为:

    egin{equation}
    overline{f}(mathbf{x}) = E_Dleft[fleft(mathbf{x}; D ight) ight]
    end{equation}

    上面的期望预测也就是针对 不同 数据集 (D), (f)(mathbf{x}) 的预测值取其期望, 也被叫做 average predicted.

    使用样本数相同的不同训练集产生的方差为:

    egin{equation}
    m{var}(mathbf{x}) = E_Dleft[left( f(mathbf{x}; D) - overline{f}(mathbf{x}) ight)^2 ight]
    end{equation}

    噪声

    噪声为真实标记与数据集中的实际标记间的偏差:

    egin{equation}
    varepsilon^2 = E_Dleft[ (y_D - y)^2 ight]
    end{equation}

    偏差

    期望预测与真实标记的误差称为偏差(bias), 为了方便起见, 我们直接取偏差的平方:

    egin{equation}
    m{bias}^2(mathbf{x}) = left( overline{f}(mathbf{x}) - y ight)^2
    end{equation}

    对算法的期望泛化误差进行分解:

    bias-variance-proof

    上面的公式[2]蓝色部分是对上面对应的等价替换, 然后对其展开后, 红色部分刚好为 0.

    对最终的推导结果稍作整理:

    bias-variance

    至此, 继续来看一下偏差, 方差与噪声的含义 [3]:

    偏差、方差、噪声

    1. 偏差:度量了模型的期望预测和真实结果的偏离程度,刻画了模型本身的拟合能力
    2. 方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响
    3. 噪声:表达了当前任务上任何模型所能达到的期望泛化误差的下界,刻画了学习问题本身的难度

    偏差-方差窘境(bias-variance dilemma)

    为了得到泛化性能好的模型,我们需要使偏差较小,即能充分拟合数据,并且使方差小,使数据扰动产生的影响小。但是偏差和方差在一定程度上是有冲突的,这称作为偏差-方差窘境。

    下图给出了在模型训练不足时,拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导泛化误差,此时称为欠拟合现象。当随着训练程度加深,模型的拟合能力增强,训练数据的扰动慢慢使得方差主导泛化误差。当训练充足时,模型的拟合能力非常强,数据轻微变化都能导致模型发生变化,如果过分学习训练数据的特点,则会发生过拟合。

    • 针对欠拟合,我们提出集成学习的概念并且对于模型可以控制训练程度,比如神经网络加多隐层,或者决策树增加树深。
      增加模型的迭代次数;更换描述能力更强的模型;生成更多特征供训练使用;降低正则化水平。
    • 针对过拟合,我们需要降低模型的复杂度,提出了正则化惩罚项。
      扩增训练集;减少训练使用的特征的数量;提高正则化水平。

    随着模型复杂度的提升, 偏差逐渐减小, 方差逐渐增大. 最佳的模型复杂度是在 Total Error 最小的时候, 该点导数为0. 由于 Err=variance+bias+noise, 所以在拐点处:[4]

    [ ewcommand{dif}{mathop{}!mathrm{d}} frac{dif ext{Bias}}{dif ext{Complexity}} = - frac{dif ext{Variance}}{dif ext{Complexity}} ]

    给出了寻找最优平衡点的数学描述。若模型复杂度大于平衡点,则模型的方差会偏高,模型倾向于过拟合;若模型复杂度小于平衡点,则模型的偏差会偏高,模型倾向于欠拟合。

    bias-variance-tradeoff

    Bias-Variance Tradeoff 理论意义

    • 能够让我们更好地认识模型的复杂度, 指导我们对模型的改进方向.
    • 偏差-方差分解实用价值很有限. 偏差和方差并不能够真正的被计算,因为我们不知道数据的真实分布. 偏置-方差分解依赖于对所有的数据集求平均,而在实际应用中我们只有一个观测数据集。

    K折交叉验证与Bias-Variance关系

    为什么K-fold Cross Validation中的k值会影响偏差和方差呢?

    K折交叉验证重复k次地把数据集分成训练集和测试集,K值越大,每次划分的训练集就越大,估计模型的期望(E[hat f])就越接近整个数据集的真实模型f,因此模型偏差就越小。 [5]

    参考资料:


    1. http://www.learnopencv.com/bias-variance-tradeoff-in-machine-learning/ ↩︎

    2. 偏差与方差 ↩︎

    3. 《机器学习》, 周志华, 2.5 节偏差与方差. ↩︎

    4. Understanding the Bias-Variance Tradeoff ↩︎

    5. 机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系? ↩︎

  • 相关阅读:
    XML 文档的结构
    java 事件机制
    Spring 中的 Resource和ResourceLoader
    Spring PropertyPlaceholderConfigurer
    生产者——消费者模型的java代码实现
    encodeURI() 函数概述
    ECMAScript 6
    node
    AJAX常见面试题
    AJAX(Asynchronous JavaScript and XML)
  • 原文地址:https://www.cnblogs.com/makefile/p/bias-var.html
Copyright © 2011-2022 走看看