机器学习笔记——模型选择与正则化

机器学习笔记——模型选择与正则化

  • 一、模型选择
    • 1.方差与偏差
    • 2.过拟合与欠拟合
    • 3.模型选择的平衡
    • 4.欠、过拟合解决方法
  • 二、正则化
    • 1.正则化线性回归
    • 2.正则化对数回归
    • 3.训练集规模对误差的影响
    • 4.模型性能评估
  • 三.范数与正则化
    • 1.总体描述
    • 2.L0与L1范数
    • 3.L2范数
    • 4.核范数

一、模型选择

1.方差与偏差

  • 我们设定 h ( x ) h(x) h(x)为近似值, y ( x ) y(x) y(x)为真实值。我们有如下式子:
    在这里插入图片描述
  • 近似值的bias我们设定为所有样本近似值与真实值之间差值的期望。近似值的var我们设定为所有样本近似值与近似值的期望之间差距的期望的平方(有点绕…,其实去掉平方的标准差更好理解)。
  • 我们可以看到bias与近似值 h ( x ) h(x) h(x)、真实值 y ( x ) y(x) y(x)相关。而variance只与近似值 h ( x ) h(x) h(x)相关。

2.过拟合与欠拟合

  • 当特征过多或者变量阶数过高导致的模型很复杂时,很容易出现过拟合的情况。

  • 我对过拟合的理解如下:越复杂的模型其学习模仿能力越强,而模型学习模仿的对象只能是训练集。但训练集只是用来近似模拟真实数据分布,并不能代表一般性,甚至不好的训练集与真实分布相差很远。因此复杂的模型只是模仿训练集很像,如果训练集的代表性不强的话得到的模型就会与真实分布相差甚远,也就是出现了过拟合的现象。

  • 线性回归中出现的过拟合现象:
    机器学习笔记——模型选择与正则化_第1张图片

  • 逻辑回归中出现的过拟合现象:
    机器学习笔记——模型选择与正则化_第2张图片

  • 对上面三张图进一步分析,其实一大群蓝色圆圈中的红叉很可能是数据收集有误,并不一定代表反例,而过拟合情况就把这两个异常点过于看重导致分类边界不具备一般性。

  • 其实过拟合是不可以避免的,因为刚开始我们是不知道该选择多复杂的模型的。针对小数据集我们一开始就故意过拟合,然后再去诊断修正。即便是很大的数据集一开始也是要从小数据集开始。过拟合代表着充分利用了训练集数据,把训练集数据中每一细枝末节都学习到了。

3.模型选择的平衡

  • 过拟合现象发生时,我们会发现训练误差会非常小,那么如果我们有多个模型得到了多组训练误差,训练误差的大小比较能作为我们模型选择的依据吗?
  • 显然是不可以的。我们将训练集随机分成两部分,训练集training set)用于最优化参数,验证集validation set)用于模型选择。
  • 如下图所示我们将初始训练集分为了两部分。蓝色代表训练集,绿色代表验证集。需要注意的是划分的时候训练集与验证集需要保证同分布,可以使用分层采样的方法。
    机器学习笔记——模型选择与正则化_第3张图片
  • 分析以下两张图,一张是4阶多项式模型,一张是30阶多项式模型。可以看出30阶多项式模型更加完美的贴合于训练集(蓝色数据点),在图的左半部分明显波动离谱与验证集之间存在较大误差也就是发生了过拟合现象。
    机器学习笔记——模型选择与正则化_第4张图片
    机器学习笔记——模型选择与正则化_第5张图片
  • 以下展示的是训练误差与验证误差随着多项式阶数变化的曲线图:
    机器学习笔记——模型选择与正则化_第6张图片
  • 可以看出:只要学习率 η \eta η选择的适当(即可以快速正确收敛)训练误差总会越来越小的。但验证误差可能会先降低后升高。上图仅仅代表的是变化趋势,实际获得的图不会这么平滑简单。
  • 训练误差小对我们来说没有用处。而验证误差则可以代表一部分该模型适应新数据的能力,因此我们要选择的是验证误差最小的模型。
  • 模型越复杂其bias越低但variance越高。而最终我们想要的泛化误差由三部分组成:bias、variance、noise。在noise不可调控的情况下我们想要使得bias与variance的总和最小,因此需要寻得二者之间的平衡(trade-off)。

4.欠、过拟合解决方法

  • 针对欠拟合我们需要做的就是提高模型的复杂程度。具体包含两个方面:1.增加更多的特征维度,但这条对于一般问题来说增加数据比较难以实现。2.提高多项式的阶数。
  • 针对过拟合并不是说模型一定不合适,而是相对于我们掌握贫乏的数据来说模型过于复杂。最好的解决方法就是收集并增加数据,不会影响bias,不用修改模型就可以解决问题,因为数据集越大训练集的特征就会越接近于真实。
  • 除此之外就是降低模型的复杂度。可以通过减少部分特征或者正则化来实现。正则化在小幅度增加bias的前提下大幅度降低variance,也会降低总体的泛化误差。
  • 总结来说机器学习数据为王。我们机器学习的目的其实就是利用有限的数据通过学习一定模型尽可能地去模拟逼近真实规律。所以我们掌握地数据大概率就是最大可能,因此更多使用正则化地方法处理过拟合。

二、正则化

1.正则化线性回归

  • 一个越复杂的模型通过学习过程计算出的参数 θ \theta θ可能会很大,尤其是高阶的 θ \theta θ。参数过大会使 x x x对于 h θ ( x ) h_\theta(x) hθ(x)影响很大,因此我们要通过减小 θ \theta θ来平滑曲线。
    机器学习笔记——模型选择与正则化_第7张图片
  • 如上图所示,加入了正则化地线性回归,优化的目标函数由损失函数 L ( θ ) L(\theta) L(θ)变为了 J ( θ ) J(\theta) J(θ)
  • R ( θ ) R(\theta) R(θ)为对参数进行的运算,我们这里接触到的计算方法是二范数的平方: R ( θ ) = ∣ ∣ θ ∣ ∣ 2 2 R(\theta)={||\theta||}^2_2 R(θ)=θ22其实正则化项不只有这一种形式,还可为一范数: R ( θ ) = ∣ ∣ θ ∣ ∣ 1 R(\theta)={||\theta||}_1 R(θ)=θ1,这就是我们熟知的可用于特征选择的LASSO算法。还可以为 R ( θ ) = λ 1 ∣ ∣ θ ∣ ∣ 2 2 + λ 2 ∣ ∣ θ ∣ ∣ 1 R(\theta)=\lambda_1{||\theta||}^2_2+\lambda_2||\theta||_1 R(θ)=λ1θ22+λ2θ1,这就是弹性网算法。
  • 对于正则化参数 λ \lambda λ,取值范围是 [ 0 , + ∞ ) [0,+\infty) [0,+)。该值越大,所有参数的值越小,模型越简单,曲线越平滑。当 λ = + ∞ \lambda=+\infty λ=+时,会使所有的参数值趋向于0。
  • 需要注意的是仔细观察 Σ \Sigma Σ求和从1开始,也就是说正则化的过程 θ 0 \theta_0 θ0并不参与。因为其对于 x x x没有影响。
  • 具体到梯度下降过程中获得下述式子。我们可以看作先把参数 θ j \theta_j θj衰减一定比例然后再进行梯度下降。这就是我们了解的权重衰减。机器学习包中有这个函数,传入的参数就是正则化参数 λ \lambda λ
    在这里插入图片描述
  • 正则化参数 λ \lambda λ决定了参数值的大小与过拟合的矫正程度,那么我们应该如何选择正则化参数呢?分析如下图像可得(图像的纵坐标要使用 L ( θ ) L(\theta) L(θ)计算而不是 J ( θ ) J(\theta) J(θ)): λ \lambda λ的值越大过拟合程度越低,欠拟合程度越高,也就是说训练误差会不断增大。而验证误差在 λ ∗ \lambda^* λ处会出现拐点,我们想要找的便是这个拐点。
    机器学习笔记——模型选择与正则化_第8张图片
  • 针对线性回归的另一种解法正规方程,我们也有正则化后的公式表达:
    机器学习笔记——模型选择与正则化_第9张图片

2.正则化对数回归

机器学习笔记——模型选择与正则化_第10张图片

  • 我们可以分析得到,对数回归的正则化原理上与线性回归相同,只不过他们拥有不同的损失函数而已。线性回归使用的是平方损失函数,而对数回归使用的是交叉熵损失函数。 J ( θ ) J(\theta) J(θ)的结构、梯度下降的方法都如出一辙。
  • 我们同样可以得到如下的函数图像:
    机器学习笔记——模型选择与正则化_第11张图片
  • 那么问题来了,我们是否可以使用其他的 L v a l ( θ ) L_{val}(\theta) Lval(θ),也就是验证集validation上的损失评价函数。当然是可以的,我们完全可以在这里使用0-1损失等其他评估方式,因为在验证集上只进行模型选择评估,而当时我们选择训练集使用交叉熵损失的原因主要是方便梯度下降优化。

3.训练集规模对误差的影响

机器学习笔记——模型选择与正则化_第12张图片

  • 一般情况下,当训练集的规模增大的时候,训练误差也会跟着增大后趋于稳定,验证误差会随之减小后趋于稳定。形象的理解是:学生做的题越多,做题时出现的错题就会越多,但是考试时出现的错题就会变少。因此合适的模型,增大训练集的规模可以减小验证误差,解决过拟合。
    机器学习笔记——模型选择与正则化_第13张图片
  • 但对于上图来说,即使在训练集数据很少的情况下,我们也能看出所选择直线模型非常不适合该数据集的分布,也就是出现了欠拟合的情况。即便增加训练集的规模,也不会对模型的训练产生好的影响。
  • 综上出现过拟合现象时,增大训练集规模可以收获很好的效果。而当出现欠拟合现象时,增大训练集规模并不会有好的收益。

4.模型性能评估

  • 对于我们掌握的带标注的数据,训练集我们用来优化参数,验证集我们用来选择模型,但在训练集与验证集上的误差都不可以代表在新的测试数据上的性能。
  • 因此我们将带标注的数据分为三类,除了已知的训练集与验证集以外,我们再单独分出一类测试集(Testing Set),不用于学习调参只用于模拟训练出的模型处理新数据的能力。
  • 但这三部分的划分一直都是个难题。不同划分比例,涉及到模型训练的好坏、模型选择的优劣、以及测试集能否很好代表处理新数据能力等等问题。我们常见的分类标准为6:2:2或者7:1.5:1.5。我们的原则是在验证集与训练集保证基本功能的基础上,尽可能扩大训练集。
  • 有一条原则就是训练集一定不可以参与到模型调参中。但验证集可以偶尔参与。存在一种方法:训练集训练出多个模型,验证集筛选出一个最优的模型,然后针对该模型用训练集+验证集再次参数优化。
  • 除此之外我们还可以使用交叉验证的方法。
    机器学习笔记——模型选择与正则化_第14张图片

三.范数与正则化

1.总体描述

  • 正则化不仅可以解决过拟合的问题,还可以约束我们的模型的特性。这样就可以将人对这个模型的先验知识融入到模型的学习当中,强行地让学习到的模型具有人想要的特性,例如稀疏、低秩、平滑等等。
  • 正则化后的目标函数中,损失函数的选择决定了这是一种什么模型。如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression了。
  • 规则化项可以是模型参数向量的范数,在论文中常见的都聚集在:零范数、一范数、二范数、迹范数、Frobenius范数和核范数等等。

2.L0与L1范数

  • L0范数是指向量中非0的元素的个数。如果我们用L0范数来正则化一个参数矩阵W的话,就是希望W的大部分元素都是0,换句话说,让参数W是稀疏的。
  • L1范数是指向量中各个元素绝对值之和。L1范数又名“稀疏规则算子”,同样可以使得参数W变稀疏。
  • 既然L0范数与L1范数都可以让参数变稀疏。那么到底什么是变稀疏?变稀疏又有什么样的好处呢?
  • 参数的稀疏化可以实现特征选择。一般来说,xi的大部分特征都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。也就是说因为多考虑训练了无用的特征导致训练模型过拟合。
  • 稀疏正则化化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
  • 那既然L0与L1均可以实现参数稀疏化而特征选择,那为什么在实际正则化时我们使用L1而不是L0呢?一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解

3.L2范数

  • L2范数是指向量各元素的平方和然后求平方根。在回归里面,有人把有它的回归叫岭回归(Ridge Regression),有人也叫它权值衰减(weight decay)。
  • L2范数的使用具体有两大好处:在学习理论角度来说,L2范数可以防止过拟合,提升模型的泛化能力。在数值计算角度来说,L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。
  • 在不加L2范数正则项时,我们可以通过正规方程发求得参数表达式如下。如果当我们的样本X的数目比每个样本的维度还要小的时候,矩阵XTX将会不是满秩的,也就是XTX会变得不可逆,所以w*就没办法直接计算出来了。
    在这里插入图片描述
  • 但如果加上L2正则项,就变成了下面这种情况,就可以直接求逆了。
    在这里插入图片描述

4.核范数

  • 核范数||W||*是指矩阵奇异值的和,*核范数是用来约束Low-Rank(低秩)。rank(w)的凸近似就是核范数||W||**。那么什么是低秩呢?
  • 从物理意义上讲,矩阵的秩度量的就是矩阵的行列之间的相关性。如果矩阵的各行或列是线性无关的,矩阵就是满秩的,也就是秩等于行数。如果矩阵表达的是结构性信息,例如图像、用户-推荐表等等,那么这个矩阵各行之间存在这一定的相关性,那这个矩阵一般就是低秩的。
  • 如果X是一个m行n列的数值矩阵,rank(X)是X的秩,假如rank (X)远小于m和n,则我们称X是低秩矩阵。低秩矩阵每行或每列都可以用其他的行或列线性表出,可见它包含大量的冗余信息。利用这种冗余信息,可以对缺失数据进行恢复,也可以对数据进行特征提取。

你可能感兴趣的:(机器学习,机器学习)