精华内容
下载资源
问答
  • 2018-08-17 13:09:01

    https://blog.csdn.net/Cerisier/article/details/78122653

     

    个人对泛化误差的看法

     

    泛化误差与交叉验证

    误差这个词我们经常会遇到,在机器学习中,我们最终想要的结果实际上就是减小学习后的估计值和真实值的误差。比如在回归中,我们的 loss function 就表示一个误差。而我们需要做的,就是最小化这个误差,也就是对 object function 的处理。

    那么什么是泛化误差呢?刚刚说我们最小化了 loss function, 那是不是就一定说明我训练了一些样本后,保证求出了一组最佳的参数从而得到了一个完美的模型呢?显然不是,中国有句老话说的很好:“是骡子是马,拉出来溜溜”。怎么评价学习后得到的模型呢?实践是检验真理的唯一标准,我们再用一些数据(test data)来看看我们得到的模型在这些数据实践后,这时候的误差是多少。而这个误差,和刚刚 loss function的误差是没有关系的,也就是我们所说的泛化误差。而将数据划分为训练集(train set)和验证集(validation set)从而来求取泛化误差的方法,就是所谓的 交叉验证

    所以交叉验证在做什么?假设我们有多种可能的模型而我们不能确定哪一种是最好的,那么我们就需要测试每一个模型训练后的泛化误差,从而选择最佳的模型。这里想多说一句,什么是模型,因为在我学习这部分时一直理解为模型就是不同参数下的同一种假设函数。实际上是完全错误的。模型指的是假设函数长什么样子,比如在回归问题中,我的假设函数可能是一个二次函数,也可能是三次甚至更高的多项式。每一个模型自然对应着一组最佳的参数,可以由最小化 loss function 来得到。交叉验证的意义在于,不是选最佳的参数,而是对每一个可能的模型,用训练集最小化 loss function 的误差从而得到最佳参数后,运用验证集来算出泛化误差。通过对泛化误差的评估来选出最优的模型。

    所以我的理解就是: 训练集的作用是最小化 loss function 这样一个误差,从而能够得到最佳的参数,他不管你输入的是什么模型;验证集的作用是求取一个模型的泛化误差,它默认在测试后已经得到了该模型的最佳参数。所以交叉验证的核心在于验证集!

     

    泛化误差的意义

    泛化误差的意义,其实就是在训练后的模型,想来看一看这个模型具不具备代表性。那么这个代表性怎么去衡量呢?我们用偏差(bias)和方差(variance)来描述。偏差是什么?给了一些新的样本,我用我所得到的模型对这个样本进行估值,那这个估值和真实值的差距就是偏差;方差是什么?在不同的训练集上即使是同一模型我们可能会得到不同的参数,那么不同训练集上得到的假设函数对新样本做出的估值是不同的。我们用这些不同估值的期望作为最终这个模型对新样本的估值,那么我们想看一下这个期望的估值与不同训练集训练结果得到的估值的离散程度。

    这和我们统计学上的期望与方差是相类似的,可以对比来看。我们希望最终的估值与实际值相差不大,而且所得到的模型也要相对稳定。在这种情况下我们就可以说我们的模型通用性比较强,也就是泛化。

     

     

    泛化误差的构成

    我们刚刚说偏差和方差可以来衡量这个模型是不是具有代表性,那么我们在验证集上得到了泛化误差后,怎么就能直接评估这个模型呢?我们来看一下泛化误差的构成。

     

    先来定义几个概念:

    1. 在训练集 dd 上,我们训练后的模型为fd(x)fd(x)
    2. 那么该模型对数据 xx 的预测输出为 f(x)¯=Ed[fd(x)]f(x)¯=Ed[fd(x)]
    3. 验证集样本的真实值为 yy
    4. 由于会有噪声的存在,样本的标签值可能与真实值有出入,标签值设为 ydyd
    5. 噪声为 ϵ=y−ydϵ=y−yd,并且服从高斯分布 ϵ∼N(0,σ2)ϵ∼N(0,σ2)
    6. 根据偏差的定义,为预测输出与样本标签的差值,bias=y−f(x)¯bias=y−f(x)¯
    7. 根据方差的定义,为预测输出与不同测试集差的离散程度,var=Ed[(fd(x)−f(x)¯)2]var=Ed[(fd(x)−f(x)¯)2]
    8. 泛化误差的定义为 Ed[(yd−fd(x))2]Ed[(yd−fd(x))2]

     

    泛化误差即每一组训练集得到结果后与验证集计算误差,误差的均值就作为衡量泛化的标准。

     

    Ed[(yd−fd(x))2]=Ed[(yd−f(x)¯+f(x)¯−fd(x))2]

                           =Ed[(yd−f(x)¯)2]+Ed[(f(x)¯−fd(x))2]+0

                           =Ed[(yd−f(x)¯)2]+Ed[(f(x)¯−fd(x))2]

                           =Ed[(yd−y+y−f(x)¯)2]+Ed[(f(x)¯−fd(x))2] 

                           =Ed[(yd−y)2]+Ed[(y−f(x)¯)2]+0+Ed[(f(x)¯−fd(x))2]

                           =Ed[(yd−y)2]+Ed[(y−f(x)¯)2]+Ed[(f(x)¯−fd(x))2]

                           =ϵ2+bias2+varEd[(yd−fd(x))2]

                           =Ed[(yd−f(x)¯+f(x)¯−fd(x))2]

                           =Ed[(yd−f(x)¯)2]+Ed[(f(x)¯−fd(x))2]+0

                           =Ed[(yd−f(x)¯)2]+Ed[(f(x)¯−fd(x))2]

                           =Ed[(yd−y+y−f(x)¯)2]+Ed[(f(x)¯−fd(x))2]

                           =Ed[(yd−y)2]+Ed[(y−f(x)¯)2]+0+Ed[(f(x)¯−fd(x))2]

                           =Ed[(yd−y)2]+Ed[(y−f(x)¯)2]+Ed[(f(x)¯−fd(x))2]

                           =ϵ2+bias2+var

     

    由这个推导可以看出来,对于每一次交差验证完我们能够得到一组误差 (yd−fd(x))2(yd−fd(x))2,当我们把所有误差求均值后发现产生的误差,可以分解为偏差,方差以及噪声。也就能够体现出泛化能力。

     

     

    总结

    以上是我对泛化误差和交叉验证的理解,总结起来就是,泛化误差是衡量一个模型推广能力的标准,而交叉验证正是利用这一性质,将数据集分为训练集合验证集,对不同的模型计算泛化误差。从而帮助我们选取这个问题下的最佳模型。

    更多相关内容
  • 文章目录先导内容一、 泛化能力(generalization ability)二、 泛化误差(generalization error)三、泛化误差上界(generalization error bound)重点来了!霍夫丁不等式的证明一、Markov’s Inequality(马尔可夫...
  • 基于支持向量机(SVM)泛化误差界,提出了一种精确且有效的多核学习方法.首先,应用SVM泛化误差界推导多核学习优化形式,并给出求解其目标函数微分的计算公式.然后,设计高效的迭代算法来求解该优化问题.最后,分析了算法的...
  • # LearningCoefficient-RLCT-ofNMF 用于计算 NMF 的真实对数规范阈值(贝叶斯泛化误差)的数值实验 MATLAB 代码。 这个实验是为\[Hayashi, 2017b\] 进行的。 ## 研究见...
  • 在机器学习中,泛化误差(预测误差)是用于算法性能度量最常用的指标,然而由于数据的分布未知,泛化误差不能被直接计算,实际中常常通过各种形式的交叉验证方法来估计泛化误差。详细地分析了泛化误差的各交叉验证...
  • 机器学习算法的最终目标是最小化...我们希望所学习到的该模型对未知数据预测的误差尽可能小,这里的误差我们就将其定义为机器学习算法的泛化误差(generalization error):Rexp⁡(f^)=EP[L(Y,f^(X))]=∫X×YL(y,f^(x)

    综述

    机器学习算法的最终目标是最小化期望损失风险(即机器学习模型在任意未知测试样本上的表现),但由于数据的真实分布我们通常是不知道的,我们可用的信息来自于训练数据,因此,机器学习的学习目标往往会转化为最小化经验风险。优化算法对经验风险最小化问题进行求解,并在算法结束的第 T T T次迭代中输出模型。我们希望所学习到的该模型对未知数据预测的误差尽可能小,这里的误差我们就将其定义为机器学习算法的泛化误差(generalization error): R exp ⁡ ( f ^ ) = E P [ L ( Y , f ^ ( X ) ) ] = ∫ X × Y L ( y , f ^ ( x ) ) P ( x , y ) d x   d y \begin{aligned} R_{\exp }(\hat{f}) &=E_{P}[L(Y, \hat{f}(X))] \\ &=\int_{\mathcal{X} \times \mathcal{Y}} L(y, \hat{f}(x)) P(x, y) \mathrm{d} x \mathrm{~d} y \end{aligned} Rexp(f^)=EP[L(Y,f^(X))]=X×YL(y,f^(x))P(x,y)dx dy

    泛化误差反映了学习方法的泛化能力,因为我们学习一个模型通常是为了解决训练数据集这一领域中的一般化问题,因此仅仅将训练数据集的经验风险最小化得到的模型推广应用到更为一般的问题时,并不能保证模型仍然是最优的,甚至模型是否可用都不能保证。所以如果一种方法学习的模型比另一种方法学习的模型具有更小的泛化误差,那么这种方法就更有效。事实上,泛化误差就是学习得到的模型的期望风险。

    泛化误差可以分解为偏差(Bias)、方差(Variance)和噪声(Noise)。我们下边将做详细介绍,但在学习偏差、方差之前,我们先来了解两个概念:训练误差与测试误差。

    训练误差与测试误差

    我们都知道,最好的机器学习模型不仅要对已知数据有很好的预测能力,也要求对新数据,也就是未知数据也要有很好的预测能力。

    当选定了损失函数,基于损失函数而计算的模型的训练误差(training error)和测试误差(test error)就成为学习方法评估的标准。

    • 训练误差:是机器学习模型关于训练数据集的平均损失
    • 测试误差:是机器学习模型关于测试数据集的平均损失

    假设现在有一个学习到的模型: Y = f ^ ( X ) Y=\hat{f}(X) Y=f^(X),另外假设 N N N是训练数据集的样本规模,那么训练误差为: R e m p ( f ^ ) = 1 N ∑ i = 1 N L ( y i , f ^ ( x i ) ) R_{\mathrm{emp}}(\hat{f})=\frac{{1}}{N} \sum_{i=1}^{N} L\left(y_{i}, \hat{f}\left(x_{i}\right)\right) Remp(f^)=N1i=1NL(yi,f^(xi))

    另外假设 N ′ N^{\prime} N是测试数据集的样本规模,那么测试误差为 e t e s t = 1 N ′ ∑ i = 1 N ′ L ( y i , f ^ ( x i ) ) e_{\mathrm{test}}=\frac{1}{N^{\prime}} \sum_{i=1}^{N^{\prime}} L\left(y_{i}, \hat{f}\left(x_{i}\right)\right) etest=N1i=1NL(yi,f^(xi))

    然后损失函数采用0-1损失时,测试误差就等于测试数据集上的误差率(error rate): e test  = 1 N ′ ∑ i = 1 N ′ I ( y i ≠ f ^ ( x i ) ) e_{\text {test }}=\frac{1}{N^{\prime}} \sum_{i=1}^{N^{\prime}} I\left(y_{i} \neq \hat{f}\left(x_{i}\right)\right) etest =N1i=1NI(yi=f^(xi)) 这里 I I I是函数: L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y, f(X))=\left\{\begin{array}{ll}1, & Y \neq f(X) \\ 0, & Y=f(X)\end{array}\right. L(Y,f(X))={1,0,Y=f(X)Y=f(X) 即预测值和目标值不相等为1,否则为0。

    相应地,测试数据集上的准确率(accuracy)为: r test  = 1 N ′ ∑ i = 1 N ′ I ( y i = f ^ ( x i ) ) r_{\text {test }}=\frac{1}{N^{\prime}} \sum_{i=1}^{N^{\prime}} I\left(y_{i}=\hat{f}\left(x_{i}\right)\right) rtest =N1i=1NI(yi=f^(xi)) 显然有 r test  + e test  = 1 r_{\text {test }}+e_{\text {test }}=1 rtest +etest =1 但是实际应用中,我们往往不对训练误差的大小给与很多关注,因为训练误差的大小仅仅对判定给定的问题是不是容易学习的是有意义的,但本质上不重要。而测试误差反映了学习方法对未知的测试数据集的预测能力,往往是我们比较重视的。对比两种方法,测试误差小的模型往往具有更好的预测能力,是更有效更优的模型。通常的,我们往往将模型对未知数据的预测能力称为泛化能力,泛化能力的评估往往通过泛化误差来衡量,而泛化误差是偏差、方差与噪声之和。

    偏差与方差

    在有监督学习中,对于任何学习算法而言,他们的泛化误差可分解为三部分:偏差、方差、噪声

    偏差、方差与噪声的概念

    对测试样本 x x x,令 y D y_{D} yD x x x在数据集中的标记, y y y x x x的真实标记, f ( x ; D ) f(\boldsymbol{x} ; D) f(x;D)为训练集 D D D上学得模型 f f f x x x上的预测输出,这里以回归问题为例,则学习算法的期望预测为 f ˉ ( x ) = E D [ f ( x ; D ) ] \bar{f}(\boldsymbol{x})=\mathbb{E}_{D}[f(\boldsymbol{x} ; D)] fˉ(x)=ED[f(x;D)] 期望输出与真实标记的差别称为偏差(bias),为了方便起见, 我们直接取偏差的平方: bias ⁡ 2 ( x ) = ( f ˉ ( x ) − y ) 2 \operatorname{bias}^{2}(\boldsymbol{x})=(\bar{f}(\boldsymbol{x})-y)^{2} bias2(x)=(fˉ(x)y)2 使用样本数相同的不同训练集产生的方差为 var ⁡ ( x ) = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] \operatorname{var}(\boldsymbol{x})=\mathbb{E}_{D}\left[(f(\boldsymbol{x} ; D)-\bar{f}(\boldsymbol{x}))^{2}\right] var(x)=ED[(f(x;D)fˉ(x))2] 噪声为真实标记与数据集中的实际标记间的偏差 ε 2 = E D [ ( y D − y ) 2 ] \varepsilon^{2}=\mathbb{E}_{D}\left[\left(y_{D}-y\right)^{2}\right] ε2=ED[(yDy)2] 这里假设噪声期望为0,即 E D [ y D − y ] = 0 \mathbb{E}_{D}\left[y_{D}-y\right]=0 ED[yDy]=0。通过简单的多项式展开合并,可对算法的期望泛化误差进行分解: E ( f ; D ) = E D [ ( f ( x ; D ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) + f ˉ ( x ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y D ) 2 ] + E D [ 2 ( f ( x ; D ) − f ˉ ( x ) ) ( f ˉ ( x ) − y D ) ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y + y − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y ) 2 ] + E D [ ( y − y D ) 2 ] + 2 E D [ ( f ˉ ( x ) − y ) ( y − y D ) ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + ( f ˉ ( x ) − y ) 2 + E D [ ( y D − y ) 2 ] \begin{aligned} E(f ; D)=& \mathbb{E}_{D}\left[\left(f(x ; D)-y_{D}\right)^{2}\right] \\=& \mathbb{E}_{D}\left[\left(f(x ; D)-\bar{f}(x)+\bar{f}(x)-y_{D}\right)^{2}\right] \\=& \mathbb{E}_{D}\left[(f(x ; D)-\bar{f}(x))^{2}\right]+\mathbb{E}_{D}\left[\left(\bar{f}(x)-y_{D}\right)^{2}\right] \\ &+\mathbb{E}_{D}\left[2(f(x ; D)-\bar{f}(x))\left(\bar{f}(x)-y_{D}\right)\right] \\=& \mathbb{E}_{D}\left[(f(x ; D)-\bar{f}(x))^{2}\right]+\mathbb{E}_{D}\left[\left(\bar{f}(x)-y_{D}\right)^{2}\right] \\=& \mathbb{E}_{D}\left[(f(x ; D)-\bar{f}(x))^{2}\right]+\mathbb{E}_{D}\left[\left(\bar{f}(x)-y+y-y_{D}\right)^{2}\right] \\=& \mathbb{E}_{D}\left[(f(x ; D)-\bar{f}(x))^{2}\right]+\mathbb{E}_{D}\left[(\bar{f}(x)-y)^{2}\right]+\mathbb{E}_{D}\left[\left(y-y_{D}\right)^{2}\right] \\ &+2 \mathbb{E}_{D}\left[(\bar{f}(x)-y)\left(y-y_{D}\right)\right] \\=& \mathbb{E}_{D}\left[(f(x ; D)-\bar{f}(x))^{2}\right]+(\bar{f}(x)-y)^{2}+\mathbb{E}_{D}\left[\left(y_{D}-y\right)^{2}\right] \end{aligned} E(f;D)=======ED[(f(x;D)yD)2]ED[(f(x;D)fˉ(x)+fˉ(x)yD)2]ED[(f(x;D)fˉ(x))2]+ED[(fˉ(x)yD)2]+ED[2(f(x;D)fˉ(x))(fˉ(x)yD)]ED[(f(x;D)fˉ(x))2]+ED[(fˉ(x)yD)2]ED[(f(x;D)fˉ(x))2]+ED[(fˉ(x)y+yyD)2]ED[(f(x;D)fˉ(x))2]+ED[(fˉ(x)y)2]+ED[(yyD)2]+2ED[(fˉ(x)y)(yyD)]ED[(f(x;D)fˉ(x))2]+(fˉ(x)y)2+ED[(yDy)2] 于是 E ( f ; D ) = bias ⁡ 2 ( x ) + var ⁡ ( x ) + ε 2 E(f ; D)=\operatorname{bias}^{2}(\boldsymbol{x})+\operatorname{var}(\boldsymbol{x})+\varepsilon^{2} E(f;D)=bias2(x)+var(x)+ε2 从该式可以看出,泛化误差可以分解为偏差、方差与噪声之和。偏差、方差与噪声的详细介绍见下述。

    偏差
    偏差度量了学习算法的期望预测与真实结果的偏离程度,刻画了学习算法本身的拟合能力

    • 高偏差:表明期望输出和真实标记之间误差大,学习算法拟合能力较差
    • 低偏差:表明期望输出和真实标记之间误差小,学习算法拟合能力更强

    低偏差机器学习算法举例:决策树,kNN和支持向量机;高偏差机器学习算法举例:线性回归,线性判别分析和逻辑回归

    通常来说线性算法容易解释,学习速度更快,但缺点是灵活性较低,无法从数据集中学习足够多的知识,具有较高的偏差.因此针对复杂问题预测性能较低。

    方差
    方差度量了同样大小的训练集的变动导致的学习性能的变化,即刻画了数据扰动所造成的影响

    目标函数是由机器学习算法从训练数据中估算出来的,因此我们应该期望算法具有一定的方差。理想情况下,从一个训练数据集到下一个训练数据集的方差不应太大,这也意味着该算法能学习到输入和输出变量之间的隐藏底层映射。而具有高方差的机器学习算法容易受到训练数据细节的强烈影响。

    • 高方差:表明训练数据集的变化对目标函数的估计值造成较大的变动
    • 低方差:表明训练数据集的变化对目标函数的估计值造成较小的变动

    低方差机器学习算法的示例包括:线性回归,线性判别分析和逻辑回归。高方差机器学习算法的示例包括:决策树,kNN和支持向量机

    对比低偏差算法与高偏差算法就可以看出来,低偏差的算法往往高方差,高偏差的算法往往低方差。通常,相比线性算法,具有较大灵活性的非线性机器学习算法具有很大的方差。例如,决策树具有很高的方差,所以我们往往需要在使用前对决策树做减枝处理,不做剪枝的话则差异更大。

    具体偏差和方差的对比可以参考下图,更有助于理解:
    在这里插入图片描述
    上图中蓝色的点表示预测值,靶心红点表示真实值,蓝点越靠近靶心表明预测值与真实值越接近,偏差越小;蓝色点越分散表明预测值之间差别很大,即方差大,反之蓝色点越集中表明预测值之间差别很小,也就是方差小。应用到该图,对偏差和方差就可以描述为:

    • 偏差(Bias):描述的是根据训练数据集拟合出的模型进行预测输出结果的期望与样本真实结果的差距,简单来讲,就是在样本上拟合的好不好。要想在bias上表现好, 达到low bias,就得复杂化模型,增加模型的参数,但这样容易过拟合,过拟合对应上图是 high variance,可以看出点很分散。 low bias对应就是点都打在靶心附近,形象描述就是瞄的很准,但手不一定稳。
    • 方差(Variance):描述的是在训练数据集上训练出来的模型在测试数据集上的表现,要想在 varlance上表现好,得到low Valence,就要简化模型,减少模型的参数,但这样容易欠拟合,欠拟合对应上图是high bias,点偏离靶心。 low variance对应就是点都打的很集中,但不ー定是靶心附近,形象描述就是手很稳,但是瞄的不准。

    噪声
    噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。

    噪声属于不可约减误差,无论使用哪种算法,都无法减少噪声。是学习算法所无法解决的问题,数据的质量决定了学习的上限。假设在数据已经给定的情况下,此时学习的上限已经确定,而这时我们需要做的就是尽可能的接近这个上限。

    导致偏差和方差的原因

    偏差的出现通常主要有两点原因:

    • 对学习算法做了错误的假设
    • 模型的复杂度不够

    如果真实模型是一个二次线性函数,而我们假设模型为一次函数,就会出现欠拟合现象,导致偏差的增大。由偏差引起的误差通常在训练误差上就能体现,或者说训练误差主要是由偏差造成的。

    方差的出现通常原因是由于模型的复杂度过高导致。

    如果真实模型是一个二次线性函数,而我们假设模型是一个高次函数,就会出现过拟合线性,导致方差的增大。由方差引起的误差通常体现在测试误差相对训练误差的增量上。

    深度学习中的偏差与方差

    神经网络的拟合能力非常强,因此它的训练误差通常较小,即偏差较小。但同时过强的拟合能力往往会导致比较大的方差,使模型的测试误差(泛化误差)增大;

    因此深度学习的核心工作之一就是研究如何避免过拟合的出现,降低模型的泛化误差,这类方法统称为正则化方法,后文在做介绍。

    偏差与方差的权衡

    模型的泛化能力是由算法的能力、数据的充分性以及任务本身的难度共同决定的。给定学习任务,为了取得好的泛化能力,则需要使偏差较小,同时又需要使方差较小,这样既能够充分拟合数据,又使得数据扰动产生的影响会比较小。

    但一般来说,偏差与方差往往是有冲突的,类似于模型评估中查准率与查全率的冲突,偏差与方差的冲突被称为偏差-方差窘境。即在机器学习中,偏差和方差之间始终存在如下的关系

    • 增加偏差将减小方差
    • 增加方差将减少偏差

    给定学习任务,假设我们可以控制学习算法的训练程度。则有:

    • 当训练不足时,模型的拟合能力不够,训练数据的扰动不足以使模型产生显著的变化,此时偏差主导泛化误差
    • 随着训练的加深,模型的拟合能力增强,训练数据发生的扰动越来越多的被模型学习到,此时方差逐渐主导泛化误差
    • 当训练程度充足后,模型的拟合能力已经非常强大,训练数据的轻微扰动都会导致模型产生显著的变化,若模型学习到许多具体的,只针对所使用的训练数据集的信息,而不同的训练数据集之间的某些特征和噪声是不一致的,这就导致了学习到的模型在很多其他的数据集上就无法获得很好的效果,此时将发生过拟合。

    在这里插入图片描述
    简单的总结一下:偏差大,说明模型欠拟合;方差大,说明模型过拟合。而我们要做的就是平衡模型的偏差和方差,在偏差和方差之间寻找一个平衡点,即泛化误差最小的点,达到optimal balance。

    偏差与方差问题解决

    整体思路:首先我们要明确的一点是:方差和偏差是无法完全避免的,只能尽量减少其影响。

    • 首先,在避免偏差时,需尽量选择正确的模型,假设任务是一个非线性问题,如果我们一直用线性模型去解决,那无论如何,高偏差是无法避免的。
    • 其次,有了正确的模型,我们还要慎重选择数据集的大小,通常情况下,数据集越大越好,但如果数据集足够大到已经对整体所有数据有了足够的代表性后,更多的数据已经不能提升模型了,反而会带来计算量的增加。而训练数据太少往往也是不好的,这会带来过拟合,模型复杂度太高,方差很大,不同数据集训练出来的模型变化非常大。
    • 最后,要选择模型的复杂度,复杂度高的模型通常对训练数据有很好的拟合能力。比如神经网络模型,往往对训练数据有非常好的拟合能力,但同时常常有过拟合情况的出现。

    具体解决思路

    减小偏差:实际上也可以称为解决欠拟合,通常有以下方法:

    1. 寻找更好的特征 – 具有代表性。
    2. 用更多的特征 – 增大输入向量的维度。(增加模型复杂度)
    3. 更复杂的模型(增加模型复杂度)
    4. 减小正则化系数

    减小方差:解决过拟合,通常有以下方法:

    1. 增大数据集合 – 使用更多的数据,数据增强(减小数据扰动所造成的影响)
    2. 减少数据特征 – 减少数据维度,高维空间密度小(减小模型复杂度)
    3. 降低模型复杂程度
    4. 正则化方法,或者增大正则项系数
    5. 交叉验证法

    方法还有很多,比如重新清洗数据、减少迭代次数、增大学习率、添加噪声数据等,具体需要根据实际问题,选择合适的一种方法或多种方法

    交叉验证

    交叉验证,主要目的是针对模型的“泛化误差”进行评估,得到模型的“泛化误差”的近似值。当有多个模型可以选择时,我们通常选择“泛化误差”最小的模型。交叉验证的方法有多种,具体可看博主本人另一篇文章:几种交叉验证法

    这里主要介绍“K折交叉验证”,再次介绍一下:

    1. 将含有N个样本的数据集(其实是训练集)分成K份,则每份含有N/K个样本,选择其中1份作为测试集,另外K-1份作为训练集。这样的话,测试集就有K种情况。
    2. 在每种情况中,用训练集训练模型,用测试集测试模型,计算模型的测试误差。
    3. 将K种情况下得到的每个模型的测试误差取均值,得到模型最终的测试误差作为泛化误差。

    注意:训练集中样本数量要足够多,通常情况下要求要大于总样本数的50%。另外训练集和测试集必须从完整的数据集中均匀取样。均匀取样的目的是希望减少训练集、测试集与原数据集之间的偏差。当样本数量足够多时,通过随机取样,便可以实现均匀取样的效果。

    博主本人之前也写过一篇这部分内容的文章,有兴趣的可以结合本博文一起看看:算法中的泛化误差、偏差、方差、噪声的理解

    参考:
    1、《机器学习》-周志华
    2、《统计学习方法》
    3、https://www.cnblogs.com/laozhanghahaha/p/12354339.html
    4、https://www.zhihu.com/question/27068705
    5、https://www.jianshu.com/p/b812e61ddbb9
    6、https://www.jianshu.com/p/eb69684f7cf4

    展开全文
  • 机器学习中的泛化误差

    千次阅读 2022-04-06 16:22:39
    机器学习中的泛化误差

    方差-偏差困境,一般来说偏差和方差冲突称为方差-偏差困境。在机器学习中,用来衡量模型在未知数据上的准确率的指标,叫做泛化误差(Generalization error)。一个集成模型( f f f)在未知数据集( D D D)上的泛化误差 E ( f ; D ) E(f;D) E(f;D),由方差( v a r var var),偏差( b i a s bias bias)和噪声( ε \varepsilon ε)共同决定。其中方差是模型的稳定性决定,偏差是训练集上的拟合程度决定,噪音是不可控的,泛化误差越小,模型就越理想。
    E ( f ; D ) = b i a s 2 + v a r + ε 2 (1) E(f;D)=bias^2+var+\varepsilon^2 \tag{1} E(f;D)=bias2+var+ε2(1)
    对于测试样本 x x x,令 y D y_D yD x x x在数据集中的标记(可能存在噪声导致标记值和真实值不同), y y y x x x的真实值, f ( x ; D ) f(x;D) f(x;D)在训练集 D D D上学得模型 f f f x x x上的预测值,以回归为例子:

    预测值的期望 y ˉ ( x ) \bar{y}(x) yˉ(x)为:
    y ˉ ( x ) = E ( f ( x ; D ) ) (2) \bar{y}(x)=E(f(x;D)) \tag{2} yˉ(x)=E(f(x;D))(2)
    y ˉ ( x ) \bar{y}(x) yˉ(x)是所有预测值的平均值。

    方差( v a r var var)的计算为:
    v a r ( x ) = E [ ( f ( x ; D ) − y ˉ ( x ) ) 2 ] (3) var(x)=E[(f(x;D)-\bar{y}(x))^2] \tag{3} var(x)=E[(f(x;D)yˉ(x))2](3)
    方差表示在某测试数据集上的方差,都是测试数据集上的预测值与其平均值的关系,与真实值没有关系。

    噪声 ( ε ) (\varepsilon) (ε)的计算:
    ε 2 = E [ ( y D − y ) 2 ] (4) \varepsilon^2=E[(y_D-y)^2] \tag{4} ε2=E[(yDy)2](4)
    标记值与真实值差平方的期望,一般忽略噪声值。

    偏差 ( b i a s ) (bias) (bias)的计算:
    b i a s 2 ( x ) = ( y ˉ ( x ) − y ) 2 (5) bias^2(x)=(\bar{y}(x)-y)^2 \tag{5} bias2(x)=(yˉ(x)y)2(5)
    偏差表示预测的期望值与真实值的差别,一般考虑偏差最小的

    偏差度量了学习算法的预测值期望与真实结果的偏离程度,刻画了算法本身对数据的拟合能力也就是训练数据的样本与训练出来的模型的匹配程度;方差度量了训练集的变化导致学习性能的变化,描述了数据扰动造成的影响;噪声则表示任何学习算法泛化能力的下界,描述了学习问题本身的难度。

    泛化误差曲线如下:
    在这里插入图片描述

    展开全文
  • 深度学习之训练误差和泛化误差

    千次阅读 2022-01-22 21:48:25
    假设,我们使用ImageNet作为数据集,再从谷歌上搜索类似的同类的图片,有时候效果会很好,有可能是训练误差,而非泛化误差,因为很多ImageNet上的图片,也是谷歌搜索出来的。 训练误差 训练误差是指, 模型在训练...

    在学习 深度学习的时候,会有不少的专业词语,有些专业词语中,有时很难分清楚。

    在之前的文章中,我们常常提到训练集验证集,其中训练集用于算法模型的训练和学习、验证集是对训练模型进行评估。在模型验证集上,不能包含训练集的数据。 假设,我们使用ImageNet作为数据集,再从谷歌上搜索类似的同类的图片,有时候效果会很好,有可能是训练误差,而非泛化误差,因为很多ImageNet上的图片,也是谷歌搜索出来的。

    训练误差

    训练误差是指, 模型在训练数据集上计算得到的误差,即在训练集上训练完毕后在训练集本身上进行预测得到了错分率。

    泛化误差

    泛化误差是指, 模型应用在同样从原始样本的分布中抽取的无限多数据样本时,模型误差的期望,即训练集上没见过的数据的错分样本比率。

    问题是,我们永远不能准确地计算出泛化误差。 这是因为无限多的数据样本是一个虚构的对象。 在实际中,我们只能通过将模型应用于一个独立的测试集来估计泛化误差, 该测试集由随机选取的、未曾在训练集中出现的数据样本构成。

    举个栗子:
    在 高中的时候,每到期末考试时,我都会整理和总结本学期和历年考试真题,做的题很多,尽管如此,在考试中,并不能保障每次都很考出好的成绩,因为我只是尝试死记硬背,如果考题正好在我的记忆中,我就会考出好成绩,反之,则很差, 在这种场景下,所有的错题应该叫训练误差。后来,我尝试通过做题,理清楚知识原理,在考试中,遇到没见过的题目,也能通过知识架构梳理出解题思路,该场景下再出错的题目应该叫泛化误差

    本号更新很慢,平时也不更新,讲的很琐碎。只是不想让自己囫囵吞枣式学习。我慢慢写,各位老板慢慢看。

    关注公众号,解锁更多深度学习内容。

    展开全文
  • 本文在假设空间有限情况下的泛化误差上界分析,并给出了简要的C语言实现。
  • 泛化误差 泛化即推广能力。 考虑在假设空间中的best function和可以从数据集中学到的best function之间的距离。 优化误差 因为优化问题带来的误差。 即从能数据集中学到的best function和使用该算法从数据集中学到的...
  • 控制抽样技术 重要属性 oob_score_:袋外数据测试模型准确度 estimators_:查看森林中树的状况 重要接口:apply、fit、predict、score 随机森林回归器 RandomForestRegressor *机器学习中调参的基本思想 *泛化误差:...
  • 泛化误差:模型是f^\hat{f}f^​,该模型对于未知数据预测的误差即为泛化误差: Rexp⁡(f^)=EP[L(Y,f^(X))]=∫X×YL(y,f^(x))P(x,y)dx dy \begin{aligned} R_{\exp }(\hat{f}) &=E_{P}[L(Y, \hat{f}(X))] \\...
  • 泛化误差: 模型在任意⼀个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似,这里可以理解成测试集。 欠拟合: 模型⽆法得到较低的训练误差。 过拟合: 模型的训练误差远小于它在测试数据集...
  • 这就是机器学习中的“模型选择”问题,理想的解决方案是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型。 泛化误差意义 以前在机器学习中一直使用经验风险(训练误差)来逼近真实风险,但事实上...
  • 泛化能力 一、 泛化误差 学习方法的泛化能力(generalization ability):方法学习到的模型对未知数据...泛化误差定义:如果学习到的模型是f^\hat ff^​,那么用这个模型对未知数据预测的误差即为泛化误差(generali...
  • 关于训练误差、测试误差、泛化误差

    万次阅读 多人点赞 2019-03-30 03:27:24
    今天我就来说说训练误差、测试误差、泛化误差到底是什么,区别所在。 对于分类学习算法,我们一般将样本集分为训练集和测试集,其中训练集用于算法模型的学习或训练,而测试集通常用于评估训练好的模型对于数据的...
  • 泛化误差上界 References 统计学习方法(第2版)李航著 p25~27 定理 对于二分类问题,当假设空间是有限个函数的集合F={f1,f2,...,fd}F=\{f_1,f_2,...,f_d\}F={f1​,f2​,...,fd​}时,对任意一个函数f∈Ff\in Ff∈F...
  • 在未知数据上的准确率的指标,叫做泛化误差
  • 【统计学习笔记】泛化误差上界1. 泛化误差2. 泛化误差上界 1. 泛化误差 学习方法的泛化能力是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质。测试误差是依赖于测试数据集的,泛化误差是...
  • 训练误差和泛化误差、K折交叉验证

    千次阅读 2020-05-29 08:42:59
    我们需要区分训练误差(training error)和泛化误差(generalization error)。通俗来讲,前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的...
  • 名词解析之泛化误差

    2019-10-02 22:16:27
    后来业界就提出了泛化误差的概念(generalization error),在机器学习中泛化误差是用来衡量一个学习机器推广未知数据的能力,即根据从样本数据中学习到的规则能够应用到新数据的能力。常用的计算方法是:用在训练集...
  • 基于Rademacher复杂度的泛化误差界 待定。
  • 机器学习模型调优方法过拟合和欠拟合降低过拟合风险的方法降低欠拟合风险的方法泛化误差、偏差和方差泛化误差偏差和误差模型评估Holdout检验交叉检验自助法集成学习BoostingBagging集成学习的步骤从减小方差和偏差的...
  • 经验误差和泛化误差

    千次阅读 2019-04-27 14:38:17
    经验误差(empirical error):也叫训练误差(training error),模型在训练集上的误差。 泛化误差(generalization error):模型在新样本集(测试集)上的误差称为“泛化误差” ...
  • 文章目录经验风险与泛化误差概述经验风险泛化误差欠拟合和过拟合训练集、验证集、测试集 经验风险与泛化误差概述 监督学习,尤其是其中一部分传统的分类问题,能够进一步泛化为一个统一的模型,称为基于分类界限的...
  • 模型过拟合及模型泛化误差评估

    千次阅读 2018-11-26 11:14:22
    在建立一个分类模型的过程中我们暂时对检验数据集一无所知(也就是暂时得不到真正泛化误差),那么此时我们是如何估计泛化误差的? 我们的目录: 目录 一、过拟合产生原因 二、过拟合与多重比较过程 三、泛化...
  • 联合概率分布没法直接知道 ,没法求泛化误差,因此只能求泛化误差上界 泛化误差越小,泛化能力越好 1、数据量大,泛化误差上界趋于0 2、假设空间容量越大,模型越难学,泛化误差上界越大 泛化误差上界=经验...
  • 5)) plt.plot(axis,rs,c='red',label="XGB") plt.legend() plt.show() 泛化误差:用来衡量模型在未知数据集上的准确率 #绘制学习曲线,查看n_estimators对模型的影响 axis=range(10,50,1) rs=[]#偏差,衡量的是准确...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,088
精华内容 14,835
关键字:

泛化误差