文章目录

  • 测试误差及其优化
    • 训练误差修正
    • 交叉验证
    • 特征选择
    • 压缩估计(正则化)
      • 岭回归(L2正则化的例子)
      • Lasso回归(L1正则化的例子)
      • 降维
        • PCA(主成分分析)
  • 方差与偏差
    • 方差:
    • 偏差:
    • 误差
    • 方差与偏差的关系
    • 模型训练为什么要引入偏差和方差?请理论论证。
      • 推导方法 - 一个很清晰的推导过程
        • 泛化误差定义
        • 方差定义
        • 偏差定义
        • 噪声定义
        • 推导过程

测试误差及其优化

一般而言,我们并不关心模型在训练集上的训练均方误差,我们关心的是模型面对未知的样本集,即测试集上的测试误差,我们的目标是使得我们建立的模型在测试集上的测试误差最小。那我们如何选择一个测试误差最小的模型呢?这是个棘手的问题,因为在模型建立阶段,我们是不能得到测试数据的。模型在训练误差很小,但是测试均方误差很大时,我们称这种情况叫模型的过拟合。

实际上我们很难对实际的测试误差做精确的计算,因此我们要对测试误差进行估计,估计的方式有两种:训练误差修正与交叉验证。

训练误差修正

前面的讨论我们已经知道,模型越复杂,训练误差越小,测试误差先减后增。因此,我们先构造一个特征较多的模型使其过拟合,此时训练误差很小而测试误差很大,那这时我们加入关于特征个数的惩罚。因此,当我们的训练误差随着特征个数的增加而减少时,惩罚项因为特征数量的增加而增大,抑制了训练误差随着特征个数的增加而无休止地减小。具体的数学量如下:
Cp=1N(RSS+2dσ^2)C_p = \frac{1}{N}(RSS + 2d\hat{\sigma}^2)Cp​=N1​(RSS+2dσ^2)
RSS=∑i=1N(yi−f^(xi))2RSS = \sum\limits_{i=1}^{N}(y_i-\hat{f}(x_i))^2RSS=i=1∑N​(yi​−f^​(xi​))2
d为模型特征个数,σ^2\hat{\sigma}^2σ^2为模型预测误差的方差的估计值,即残差的方差。

  • AIC赤池信息量准则:
    AIC=1dσ^2(RSS+2dσ^2)AIC = \frac{1}{d\hat{\sigma}^2}(RSS + 2d\hat{\sigma}^2)AIC=dσ^21​(RSS+2dσ^2)
    适用于许多使用极大似然估计进行拟合的模型,若线性回归模型的误差服从高斯分布,极大似然估计和最小二乘估计是等价的。

  • BIC贝叶斯信息量准则:BIC=1n(RSS+log(n)dσ^2)BIC = \frac{1}{n}(RSS + log(n)d\hat{\sigma}^2)BIC=n1​(RSS+log(n)dσ^2)

交叉验证

前面讨论的对训练误差修正得到测试误差的估计是间接方法,这种方法的桥梁是训练误差,即通过训练误差和测试误差的关系和特点估计测试误差。而交叉验证则是对测试误差的直接估计

最常用的是K折交叉验证。我们把训练样本分成K等分,然后用K-1个样本集当做训练集,剩下的一份样本集为验证集去估计由K-1个样本集得到的模型的精度,这个过程重复K次取平均值得到测试误差的一个估计:CV(K)=1K∑i=1KMSEiCV_{(K)} = \frac{1}{K}\sum\limits_{i=1}^{K}MSE_iCV(K)​=K1​i=1∑K​MSEi​

特征选择

在测试误差能够被合理的估计出来以后,我们做特征选择的目标就是:从p个特征中选择m个特征,使得对应的模型的测试误差的估计最小。对应的方法有:
1.最优子集选择(best subset selection)
假如目前由p个特征,那么我们每次选择k个特征,从数量为k的所有可能的特征组合中得到最好的那个(最终被选择的特征数量可以小于k),这里的最好指RSS(残差平方和)最小,或者R平方最大,这样我们就得到针对不同数量的最好的特征子集了。最后,我们通过交叉验证、AIC、BIC或者R平方从这p+1(包含特征数为0的模型)个模型中选择最优模型。

1.向前逐步选择:
最优子集选择虽然在原理上很直观,但是随着数据特征维度p的增加,子集的数量为2p2^p2p,计算效率非常低下且需要的计算内存也很高,在大数据的背景下显然不适用。因此,我们需要把最优子集选择的运算效率提高,因此向前逐步选择算法的过程如下:
(i) 记不含任何特征的模型为M0M_0M0​,计算这个M0M_0M0​的测试误差。
(ii) 在M0M_0M0​基础上增加一个变量,计算p个模型的RSS,选择RSS最小的模型记作M1M_1M1​,并计算该模型M1M_1M1​的测试误差。
(iii) 在最小的RSS模型下继续增加一个变量,选择RSS最小的模型记作M2M_2M2​,并计算该模型M2M_2M2​的测试误差。
(iv) 以此类推,重复以上过程知道拟合的模型有p个特征为止,并选择p+1个模型{M0,M1,...,Mp}\{M_0,M_1,...,M_p \}{M0​,M1​,...,Mp​}中测试误差最小的模型作为最优模型。

压缩估计(正则化)

除了刚刚讨论的直接对特征自身进行选择以外,我们还可以对回归的系数进行约束或者加罚的技巧对p个特征的模型进行拟合,显著降低模型方差,这样也会提高模型的拟合效果。具体来说,就是将回归系数往零的方向压缩,这也就是为什么叫压缩估计的原因了。

岭回归(L2正则化的例子)

在线性回归的损失函数的基础上添加对系数的约束或者惩罚,即:
J(w)=∑i=1N(yi−w0−∑j=1pwjxij)2+λ∑j=1pwj2,λ≥0w^=(XTX+λI)−1XTYJ(w) = \sum\limits_{i=1}^{N}(y_i-w_0-\sum\limits_{j=1}^{p}w_jx_{ij})^2 + \lambda\sum\limits_{j=1}^{p}w_j^2,\;\; \qquad \lambda \ge 0\\ \hat{w} = (X^TX + \lambda I)^{-1}X^TY J(w)=i=1∑N​(yi​−w0​−j=1∑p​wj​xij​)2+λj=1∑p​wj2​,λ≥0w^=(XTX+λI)−1XTY

调节参数λ\lambdaλ的大小是影响压缩估计的关键,λ\lambdaλ越大,惩罚的力度越大,系数则越趋近于0,反之,选择合适的λ\lambdaλ对模型精度来说十分重要。岭回归通过牺牲线性回归的无偏性降低方差,有可能使得模型整体的测试误差较小,提高模型的泛化能力。

Q:加了正则化会破坏模型的无偏性吗?

在sklearn中为:sklearn.linear_model.ridge_regression(X, y, alpha, *, sample_weight=None, solver='auto', max_iter=None, tol=0.001, verbose=0, random_state=None, return_n_iter=False, return_intercept=False, check_input=True)

Lasso回归(L1正则化的例子)

岭回归的一个很显著的特点是:将模型的系数往零的方向压缩,但是岭回归的系数只能呢个趋于0但无法等于0,换句话说,就是无法做特征选择。能否使用压缩估计的思想做到像特征最优子集选择那样提取出重要的特征呢?答案是肯定的!我们只需要对岭回归的优化函数做小小的调整就行了,我们使用系数向量的L1范数替换岭回归中的L2范数:
J(w)=∑i=1N(yi−w0−∑j=1pwjxij)2+λ∑j=1p∣wj∣,λ≥0J(w) = \sum\limits_{i=1}^{N}(y_i-w_0-\sum\limits_{j=1}^{p}w_jx_{ij})^2 + \lambda\sum\limits_{j=1}^{p}|w_j|,\;\; \qquad \lambda \ge 0 J(w)=i=1∑N​(yi​−w0​−j=1∑p​wj​xij​)2+λj=1∑p​∣wj​∣,λ≥0

Q:为什么Losso能做到特征选择而岭回归却不能呢个做到呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PtLafO0L-1616340176420)(media/16163076016972/1.20.png)]
椭圆形曲线为RSS等高线,菱形和圆形区域分别代表了L1和L2约束,Lsaao回归和岭回归都是在约束下的回归,因此最优的参数为椭圆形曲线与菱形和圆形区域相切的点。但是Lasso回归的约束在每个坐标轴上都有拐角,因此当RSS曲线与坐标轴相交时恰好回归系数中的某一个为0,这样就实现了特征提取。反观岭回归的约束是一个圆域,没有尖点,因此与RSS曲线相交的地方一般不会出现在坐标轴上,因此无法让某个特征的系数为0,因此无法做到特征提取。

在sklearn中为:class sklearn.linear_model.Lasso(alpha=1.0, *, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')

降维

首先小结一下,前面提出了两种对方差控制的方式,一种是使用原始变量的子集,另一种是将变量系数压缩至零。但是这些方法都是基于原始特征得到的。也可以将原始的特征空间投影到一个低维的空间实现变量的数量变少,如:将二维的平面投影至一维空间。

之所以使用降维后的数据表示是因为在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少 冗余信息 所造成的误差,提高识别(或其他应用)的精度。又或者希望通过降维算法来寻找数据内部的本质结构特征。在很多算法中,降维算法成为了数据预处理的一部分,如PCA。事实上,有一些算法如果没有降维预处理,其实是很难得到很好的效果的。

PCA(主成分分析)

利用正交变换把线性相关变量表示的观测数据转换为少数几个由线性无关变量表示的数据。线性无关的变量成为主成分。思想:通过最大投影方差 将原始空间进行重构。

直观解释:对原始坐标系中数据的PCA等价于进行坐标轴旋转变换,将数据投影到新坐标系的坐标轴上。新坐标系的第一/第二坐标轴分别代表第一/第二主成分。数据在新坐标轴每一轴上的坐标值的平方表示相应新变量的方差(在已经规范化的前提下,即使均值为0)。新坐标系是在所有可能的坐标系中,坐标轴上的方差值和最大的。方差表示在新变量上信息的大小。


方差与偏差

方差:

所谓模型的方差就是:用不同的数据集去估计f时,估计函数的改变量。方差度量了同样大小的训练集的变动所导致的学习性能的变化, 即 刻画了数据扰动所造成的影响

随机变量与其期望值之间的波动程度,衡量的是稳定性

一个随机变量的方差描述的是它的离散程度, 也就是该随机变量在其期望值附近的 波动程度 . 取自维基百科一般化的方差定义:

如果X是一个向量其取值范围在实数空间RnR^nRn,并且其每个元素都是一个一维随机变量,我我们就称X为随机向量。随机向量的方差是一维随机变量方差的自然推广,其定义为E[(X−μ)(X−μ)T]E[(X-\mu)(X-\mu)^T]E[(X−μ)(X−μ)T],其中 μ=E(X)\mu=E(X)μ=E(X), XTX^TXT是X的转置。

举个例子:我们想要建立一个线性回归模型,可以通过输入中国人身高去预测我们的体重。但是显然我们没有办法把全中国13亿人做一次人口普查,拿到13亿人的身高体重去建立模型。我们能做的就是从13亿中抽1000个样本进行建模,我们对这个抽样的过程重复100遍,就会得到100个1000人的样本集。我们使用线性回归模型估计参数就能得到100个线性回归模型。由于样本抽取具有随机性,我们得到的100个模型不可能参数完全一样,那么这100个模型之间的差异就叫做方差。显然,我们希望得到一个稳定的模型,也就是在不同的样本集估计的模型都不会相差太大,即要求f的方差越小越好。一般来说,模型的复杂度越高,f的方差就会越大。 如加入二次项的模型的方差比线性回归模型的方差要大。

偏差:

假如真实的数据X与Y的关系是二次关系,但是我们选择了线性模型进行建模,那由于模型的复杂度引起的这种误差我们称为偏差,它的构成是复杂的。偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。

期望值与真实值之间的一致差距,衡量的是准确性

这里的偏指的是 偏离 , 那么它偏离了什么到导致了误差? 潜意识上, 当谈到这个词时, 我们可能会认为它是偏离了某个潜在的 “标准”, 而这里这个 “标准” 也就是真实情况 (ground truth). 在分类任务中, 这个 “标准” 就是真实标签 (label).

误差

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

为了使得模型的测试均方误差达到最小值,也就是同时最小化偏差的平方和方差。由于我们知道偏差平方和方差本身是非负的,因此测试均方误差的期望不可能会低于误差的方差,因此我们称误差的平方为建模任务的难度,这个量在我们的任务确定后是无法改变的,也叫做不可约误差。

方差与偏差的关系

偏差度量的是单个模型的学习能力,而方差度量的是同一个模型在不同数据集上的稳定性。“偏差-方差分解”说明:泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。

想当然地, 我们希望偏差与方差越小越好, 但实际并非如此. 一般来说, 偏差与方差是有冲突的, 称为偏差-方差窘境 (bias-variance dilemma).

  • 给定一个学习任务, 在训练初期, 由于训练不足, 学习器的拟合能力不够强, 偏差比较大, 也是由于拟合能力不强 (偏差过大), 数据集的扰动也无法使学习器产生显著变化, 也就是欠拟合的情况;
  • 随着训练程度的加深, 学习器的拟合能力逐渐增强 (偏差减小), 训练数据的扰动也能够渐渐被学习器学到 (方差增大);
  • 充分训练后, 学习器的拟合能力已非常强, 训练数据的轻微扰动都会导致学习器发生显著变化, 当训练数据自身的、非全局的特性被学习器学到了, 则将发生过拟合 (方差过大)。

一般而言,增加模型的复杂度,会增加模型的方差,但是会减少模型的偏差,我们要找到一个方差–偏差的权衡,使得测试均方误差最小。

模型训练为什么要引入偏差和方差?请理论论证。

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

优化监督学习=优化模型的泛化误差,模型的泛化误差可分解为偏差、方差与噪声之和
Err = bias + var + irreducible error

以回归任务为例,其实更准确的公式为:Err = bias^2 + var + irreducible error^2

推导方法 - 一个很清晰的推导过程

参考 理解机器学习中的偏差与方差

首先定义以下推导过程中所需符号:

泛化误差定义

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

Err(x)=E[(yD−f(x;D))2]Err(\mathbf{x}) = E\left[\left( y_D - f(\mathbf{x}; D) \right)^2\right]Err(x)=E[(yD​−f(x;D))2]

方差定义

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

f‾(x)=ED[f(x;D)]\overline{f}(\mathbf{x}) = E_D\left[f\left(\mathbf{x}; D\right)\right]f​(x)=ED​[f(x;D)]

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

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

var(x)=ED[(f(x;D)−f‾(x))2]var(\mathbf{x}) = E_D\left[\left( f(\mathbf{x}; D) - \overline{f}(\mathbf{x}) \right)^2\right]var(x)=ED​[(f(x;D)−f​(x))2]

偏差定义

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

bias2(x)=(f‾(x)−y)2bias^2(\mathbf{x}) = \left( \overline{f}(\mathbf{x}) - y \right)^2bias2(x)=(f​(x)−y)2

噪声定义

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

ϵ2=ED[(yD−y)2]\epsilon^2 = E_D\left[ (y_D - y)^2 \right]ϵ2=ED​[(yD​−y)2]

推导过程

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

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

  • 第一个红色式子为0的原因是第二个括号里的两项均是常数,第一个括号里的第一项在期望的意义下等于第二项。
  • 第二个标红的式子来自于yDy_DyD​在期望EDE_DED​下等于y,即假设ED[yd−y]=0E_D[y_d-y]=0ED​[yd​−y]=0.

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

集成学习(上) - Talk 3相关推荐

  1. (三)集成学习上——偏差与方差

    参考:DataWhale教程链接 集成学习(上)所有Task: (一)集成学习上--机器学习三大任务 (二)集成学习上--回归模型 (三)集成学习上--偏差与方差 (四)集成学习上--回归模型评估与超 ...

  2. 20210317_23期_集成学习(上)_Task02_sklearn构建完整机器学习模型

    二.Sklearn构建完整机器学习模型 目录 二.Sklearn构建完整机器学习模型 来源 2.1 机器学习项目通常步骤 2.2 用Sklearn对机器学习项目的构建 2.2.1 导入数据集及特征选择 ...

  3. 集成学习(上):机器学习基础task1-熟悉机器学习的三大主要任务

    机器学习基础task1-熟悉机器学习的三大主要任务 1.导论 1.1 回归 1.2 分类 1.3 无监督学习 学习内容来源链接 1.导论 什么是机器学习?机器学习的一个重要的目标就是利用数学模型来理解 ...

  4. 集成学习(上)——Task3 考试前千万不要背书

    机器学习专题 机器学习三要素 模式识别 贝叶斯推导 机器学习训练的套路 考试前千万不要背书 机器学习专题 进度条 考试前千万不要背书! 我们要怎么学习?[^1] 世界上难的不是无路可走,而是选择太多 ...

  5. 【集成学习(上)】My_Task03掌握偏差与方差理论 笔记

    文章目录 (4) 优化基础模型 (4) 优化基础模型 特征提取的实例:向前逐步回归 案例来源:https://blog.csdn.net/weixin_44835596/article/details ...

  6. (七)集成学习中-投票法Voting

    集成学习第一法宝:投票! 参考:DataWhale教程链接 集成学习(上)所有Task: (一)集成学习上--机器学习三大任务 (二)集成学习上--回归模型 (三)集成学习上--偏差与方差 (四)集成 ...

  7. (十五)集成学习(下)——蒸汽量预测

    参考:DataWhale教程链接 集成学习(上)所有Task: (一)集成学习上--机器学习三大任务 (二)集成学习上--回归模型 (三)集成学习上--偏差与方差 (四)集成学习上--回归模型评估与超 ...

  8. 【集成学习-组队学习】2.使用sklearn构建完整的机器学习项目流程

    使用sklearn构建完整的机器学习项目流程 组队学习来源: Datewhle23期__集成学习(上) : https://github.com/datawhalechina/team-learnin ...

  9. 【组队学习】【29期】7. 集成学习(上)

    7. 集成学习(上) 航路开辟者:李祖贤.薛传雨.六一.杨毅远.陈琰钰 领航员:刘思含 航海士:李祖贤 基本信息 开源内容:https://github.com/datawhalechina/ense ...

最新文章

  1. mysql登录报错:ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)
  2. Unidirectional Link Detection Protocol
  3. 为什么在重庆比北京更容易迷路?Nature子刊:大脑GPS系统呈蜂窝状,弯路多了就“变形”...
  4. JavaScript获取节点类型、节点名称和节点值
  5. jQuery css-dom
  6. 生死6小时!!!!!!!!!!!!!!!!1
  7. python print 输出到txt_Python的print()输出形式
  8. CKEditor上传视频(java)
  9. ASP.NET MVC与RAILS3的比较
  10. 改善深层神经网络:超参数调整、正则化以及优化——2.3指数加权平均
  11. git 本地项目上传
  12. git整合分支的两种方式 merge 和 rebase
  13. 技巧 | Markdown 语法中首行缩进的方法
  14. Oracle12C如何启动PDB数据库
  15. android根据经纬度获取位置,Android获取经纬度
  16. Python爆破ZIP文件(支持纯数字数字+字母密码本)
  17. TRUNK理论与配置实验
  18. 手机浏览器调用手机qq客户端的js
  19. 可用计算机玩游戏,MONI玩 全球唯一可用电脑玩手游的平台
  20. 《译 SFML Essentials 英文版》—— 《第一章》 SFML 入门

热门文章

  1. 中国个人品牌顶尖权威恒洋老师的三句话,让我不再迷茫
  2. 在word中或者Visio中字母上加一个横线 或者x拔
  3. Python报错: AttributeError: ‘Spider2107Pipeline‘ object has no attribute ‘wb‘
  4. 技术博客写作计划(持续更新)
  5. STM32CubeMX——定时器配置
  6. 基于springboot游泳健身后台管理系统(Java毕业设计)
  7. Batch_Normalization 、Layer_Normalization 、Group_Normalization你分的清楚吗
  8. android 获取24小时,Android系统时间制式的获取
  9. 1.1安装配置Android Studio集成开发环境
  10. C/C++ 调用Adobe Acrobat Reader DC实现PDF文件打印