机器学习-模型评估、选择与优化

发布于:2025-08-13 ⋅ 阅读:(14) ⋅ 点赞:(0)

模型评估与选择:

之前已经了解过了简单的线性回归、逻辑回归以及SoftMax回归的模型建立过程,我们可以把损失函数总结为下式:

J=\frac{1}{2m}\sum error(i)+\frac{\lambda }{2m}\sum w_{j}^{2}

如果训练得到的模型的损失函数较大,也就是我们的模型存在较大误差时,一般可以考虑从如下6个方面来调整:

  • 增加样本数量;
  • 增加特征数量;
  • 减少特征数量;
  • 增加多项式特征;
  • 增大正则化参数\lambda
  • 减小正则化参数\lambda

这6个方法对于某些特定的问题有较好的效果,而我们需要做的就是:通过测试与分析找出究竟是什么原因导致了模型出现的较大误差,从而对症下药,选择不同的方案来优化。

对于特征量(1-2个)较少的问题,我们可以根据样本以及模型来做出具体图像,从而很容易的找出问题所在,而对于特征量很多的问题,我们无法直接作图,因此考虑将样本进行划分。

在原始的做法中,所有的样本都将用于训练模型,而现在,我们选取一定比例,如70%的样本,将其作为“训练集”,这一部分样本数据用于训练模型,而剩余部分则作为“测试集”,用于测试训练得出的模型效果,那么训练集与测试集的损失函数表达式如下:

J_{train}=\frac{1}{2m_{train}}\sum error(i)

J_{test}=\frac{1}{2m_{test}}\sum error(i)

注意,此时的损失函数均不包含正则化项

那么,现在我们采用当前的训练集用于不同模型的训练,从而分别得出对应的模型参数,再将此模型运用于测试集分别得出对应的损失函数。此时我们自然的会选择在测试集上表现更好,也就是损失越小的模型作为最终的模型,但是如果直接将这个测试集损失作为整体模型的泛化误差显然是有问题的。因为这是我们人为选择的最小测试集损失,在其他的样本上,很大可能得到的损失都是大于此损失的。所以,我们进一步的对所有样本进行划分,最终分为训练集、验证集与测试集。同上可以得出验证集损失表达式:

J_{cv}=\frac{1}{2m_{cv}}\sum error(i)

模型训练的部分与前述相同,不过训练得出的模型不再运用于测试集,而是用于验证集,再选择验证集的损失最小的模型运用于测试集,此时得出的测试集损失才是模型真正的泛化误差。

需要注意的是:测试集不参与任何对模型的决定

高偏差、高方差判断:

在之前的逻辑回归中,我们提到过高方差与高偏差(也就是过拟合与欠拟合),结合上面的样本划分可以得出:

高偏差:也就是模型欠拟合时,不论是在训练集还是验证集上,模型表现都很差,相应得到的损失J_{test}J_{cv}会是一个较大值。这里的较大是指与基线水平相比较,基线水平可以是人类对于相同问题的解决水平、先前的其他模型、算法的水平或是相关经验预测等。

高方差:也就是模型过拟合时,此时在训练集上模型表现非常好,甚至可能达到0误差,但在验证集上的表现很差,J_{cv}远大于J_{test}

高偏差且高方差:此时的模型不论是在训练集还是验证集上,模型表现都很差,并且,J_{cv}远大于J_{test}

总结来说,要判断一个模型是否高偏差,则需要比较J_{test}J_{base};要判断一个模型是否高方差,则需要比较J_{test}J_{cv}

以简单的回归问题为例,假设多项式的次数不断增加,也就意味着模型由简单变为复杂时,相应的在训练集上,模型的表现会越来越就好;而在验证集上,一开始随着次数增加表现也会变好,但当次数不断增加时,模型会出现过拟合的情况,因此即使在训练集上一直表现很好,但在验证集上的表现却越来越差。

正则化参数影响:

同样是在逻辑回归中提到过的正则化,接下来分析随着正则化参数\lambda的变化,模型在训练集与验证集上的损失将如何变化。

\lambda很小,甚至趋于0时,实际上会接近于没有正则化项,此时损失部分只有预测值于真实值之间的均方误差,因此模型的梯度下降方向就是不断地沿着减小这一均方误差的方向进行,有可能会出现过拟合现象。所以模型在训练集上的表现很好,而在验证集上的表现却不如人意。

而随着\lambda的增加,此时模型训练过程中不仅是不断的减小误差,同时也一定程度上的保证了避免过拟合,因此训练集误差会增加而验证集误差会减少。

而当\lambda继续增加,此时模型训练过程中更关注的是正则化项,而并非误差项,因此相应的训练集和验证集误差都会增加。

学习曲线:

随着训练集样本数量不断增大,相应的J_{test}J_{cv}的变化曲线就是学习曲线。随着训练集样本数量的增加,模型会更难完全拟合所有的训练数据,所以训练集损失会增加,但大样本增强了模型的泛化能力,所以验证集损失会减小,如下图所示:

而对于高偏差情况,对应的学习曲线如下图所示:

一般出现高偏差时说明当前模型过于简单,因此,随着样本数量的不断增加,拟合效果自然会下降,但当样本已经达到一定数量之后,此时样本数的增加对于模型实际参数的影响较小,也就代表模型几乎不会有过多的变化,因此在曲线后半段会出现“平台”;同样的,对于验证集而言,一开始样本数量的增加还是有利于模型的泛化,但后半段时由于模型几乎不再变化,也会出现“平台”

对于高方差情况,对应的学习曲线如下图所示:

根据图像易知,此时的曲线与一般情况下的形状一致,但是,由于目前的模型存在一定的过拟合,因此其在训练集上的表现很有可能优于基线水平。

具体优化方法:

现在回顾到之前提到的6种优化方法,以及高偏差与高方差时的学习曲线,可以得出具体在遇到什么问题时,应该采用什么方法来减小误差。

高偏差:

  • 增加特征数量、增加多项式特征:高偏差问题的主要原因有模型过于简单,因此这两种方法可以很好的增加模型的灵活性,从而提高准确性,而从学习曲线即可知,一味的增加样本对于高偏差情况帮助不大。
  • 减小正则化参数\lambda:这有助于在损失函数中增加对误差部分的考量,也就是说,这有利于模型向着减小误差的方向进行,从而实现优化。

高方差:

  • 增加样本数量:由学习曲线可知,增加样本数量可以减小误差并提高模型泛化能力。
  • 减少特征数量、增加正则化参数\lambda:高方差的主要问题有模型过于复杂,从而导致过拟合,因此剔除掉一部分不重要的特征,或是增加正则化参数\lambda(减少对于误差项的考量),都可以一定程序上的减轻过拟合情况,从而实现模型优化。

神经网络优化:

根据前面的所有内容可知,实际上我们往往一次需要解决的是高偏差或高方差中的一种问题,一般不会同时出现高偏差和高方差的情况,因此对于神经网络模型,常用的模型选择思路是:

首先通过训练集训练得到初始的模型,如果模型在训练集上的表现已经不好,则说明此时存在高偏差问题,因此我们需要选择一个更大的神经网络模型(更多的隐藏层/层中更多隐藏单元),直到模型在训练集上的表现可以满足我们的目标。

接下来就是将刚才训练得到的模型应用于验证集上,如果模型在验证集上的表现不好,则说明此时存在高方差问题,因此我们需要增加更多的样本数据,再回到刚刚训练模型的部分,不断重复这个流程,直到在验证集上的表现满足我们的目标为止。

事实上,如果我们对更大的神经网络模型进行适当的正则化,一般不会带来高方差问题。


网站公告

今日签到

点亮在社区的每一天
去签到