机器学习问题

问并回答


劳拉·马丁内斯·莫莱拉(Laura Martinez Molera)著


关于模型验证

这些专栏文章将研究一个主题,解释一些背景知识,并回答我从MATLAB和Simulink社区听到的一些问题。万博1manbetx

本专栏主要讨论模型验证,以及一些相关主题,如过拟合和超参数调优。我会总结一下这个话题以及它为什么重要,然后看看四个问题:

1.为什么我的模型的准确性越来越差?

2.训练数据集和测试数据集之间的区别是什么?

3.验证数据集用于什么?

4.如何在不过度拟合的情况下改进模型?

模型验证是机器学习的一项基础技术。如果使用正确,它将帮助你评估你的机器学习模型对新数据的反应。这在两个方面有帮助:

  • 它可以帮助您确定要使用的算法和参数。
  • 它可以防止训练过程中过度拟合。

当我们使用手头的数据集来处理问题时,找到正确的机器学习算法来创建我们的模型是非常重要的。每种模式都有自己的优缺点。例如,一些算法对小数据集有更高的容忍度,而另一些算法则擅长处理大量的高维数据。因此,使用相同数据集的两个不同模型可以预测不同的结果,具有不同的精度。

为数据找到最佳模型是一个交互过程,包括测试不同的算法以最小化模型误差。控制机器学习算法行为的参数被调用hyperparameters. 取决于您为超参数选择的值,您可能会得到一个完全不同的模型。因此,通过调优超参数的值,您可以找到不同的,希望是更好的 模型。    

在没有模型验证的情况下,很容易在您没有意识到的情况下调优您的模型,使其开始过拟合。你的训练算法应该调整参数以最小化损失函数,但有时它做得太过了。当这种情况发生时,模型变成overfit也就是说,它过于复杂,不能很好地处理新数据。我将在第三个问题中更深入地讨论这个问题。

要测试您的模型对新数据的工作效果如何,您可以使用模型验证,方法是对数据集进行分区,并使用子集来训练算法,并使用其余数据来测试它。

因为模型验证不会使用所有的数据来建立模型,所以它是在训练期间防止过拟合的常用方法。

现在,第一个问题。

如果您想了解更多关于与MATLAB模型验证和超参数优化相关的函数和语法的细节,请参见
模型建立与评估

问1

第一个问题

我的模型在训练数据上运行得很好,但当我给它新数据时,结果就不那么好了。我该如何解决这个问题?

这听起来像是您的模型过度拟合,这意味着您的模型完全与训练集对齐,但不知道如何响应新的输入或数据。模型对您用来训练模型的数据集的响应“太好了”。

一开始,过度拟合的模型似乎很有希望,因为对训练集的误差非常低。然而,对测试集的误差较高,模型变得不准确。

模型过拟合最常见的原因是训练数据不足,所以最好的解决方法是收集更多的数据,更好地训练模型。但你不仅需要更多的数据,你还需要确保这些数据足够代表模型的复杂性和多样性,这样模型就会知道如何响应它。

过度拟合数据的复杂模型的图像

问2

我知道数据需要分成组,但我认为测试和训练数据集的目的是一样的。有什么区别呢?

实际上,测试和训练数据集是不同的。当我在前面介绍模型验证时,我讨论了模型验证如何将数据划分到这两个子集中,所以让我深入讨论一下。

模型验证使用将数据随机分成不同的子集通过调整模型以正确响应新输入来降低模型过拟合的风险。两个典型的数据子集是:

  • 训练集-该数据用于训练和拟合模型,并确定参数。它通常占数据的60-70%,需要反映模型的复杂性和多样性。
  • 测试组—该数据用于评估模型的性能。这通常约占数据的30-40%,还需要反映模型的复杂性和多样性。

由于我们需要在两个数据集中反映模型的复杂性和多样性,所以需要对它们进行随机划分。这种方法也将降低模型过拟合的风险,并为我们提供一个更准确但更简单的模型来产生研究结果。

如果我们用一个非随机选择的数据集训练模型,模型将会为数据的特定子集训练得很好。问题是这个非随机数据不能代表我们想要应用模型的其他数据或新数据。例如,假设我们正在分析一个城镇的能源消耗。如果我们使用的数据集进行训练和测试不是随机的,只有周末能源消耗的数据,通常低于工作日,当我们将模型应用于新的数据,如月,它不会是准确的,因为它只代表了周末。

让我用一个调整到训练数据集的两个模型的例子来说明这一点。我要用一个基本的例子
机器学习斜坡弯道
.这里,我有一个简单的模型和一个复杂的模型:

简单的模型

84%的准确率

复杂的模型

100%的准确率

您可以看到,复杂模型更好地适应训练数据,其性能为100%,而简单模型的性能为84%。人们很容易宣布复杂的模式是赢家。然而,让我们看看如果我将测试数据集(训练期间没有使用的新数据)应用到这些模型的结果:

简单的模型

70%的准确率

复杂的模型

60%的准确率

当我比较两个模型的性能时,我的简单模型的准确率从84%下降到70%;然而,这一变化远没有复杂模型中40点的降幅(100% - 60%)那么显著。总之,简单模型对于此分析来说更好、更准确,而且它还演示了使用测试数据集来评估模型是多么重要。

最后,另一个建议。为了减少可变性,使用数据集的不同分区进行多轮模型验证,以使模型更好地适应您的分析。这种技术叫做k-fold交叉验证
了解交叉验证的其他技术

我使用的例子是在机器学习匝道中找到的。以下是那次训练的片段(2:31):

问3

我以为我只需要一个训练和测试数据集;是否也需要一个验证数据集?我真的需要再次分割我的数据吗?

可怜的、被误解的验证集。这是一个常见的问题。没有人(通常!)质疑训练和测试集的必要性,但是我们也不清楚为什么要划分验证集。简单的回答是,在调优超参数以查看调优是否有效时使用验证集——换句话说,在完整的模型上进行迭代。然而,有时这个术语验证设置错误地用于表示测试数据集。关于验证数据集为什么有用,这里有一个更完整的答案:

  • 验证设置-该数据集用于评估模型的性能,同时调优模型的超参数。该数据用于更频繁的评估,并用于更新超参数,因此验证集间接影响模型。调优模型的超参数并不是严格必要的,但通常建议这样做。
  • 测试组-这个数据集用于对训练集中的最终模型拟合提供一个无偏的评估。该集合只在模型完全训练完毕且不影响模型时使用;只是为了计算性能。

总而言之,训练数据集训练我们现有的不同算法,验证数据集比较不同算法(使用不同超参数)的性能,并决定采用哪种算法。测试数据集给出了特定模型的准确性、灵敏度和性能。

问4

我想改进我的模型,但我害怕过度拟合。我该怎么办?

这是个好问题。在本专栏的介绍中,我简要地提到过超参数控制机器学习算法的行为。现在我要更深入地讲一下。

你可以把超参数想象成一辆自行车的部件:我们可以改变影响系统性能的东西。假设你买了一辆二手自行车。车架的尺寸是合适的,但如果你调整座椅高度,拧紧或松开刹车,给链条上油,或者根据你的地形安装合适的轮胎,自行车可能会更有效率。外部因素也会影响你的旅行,但是骑着优化的自行车从A点到B点会更容易。类似地,调优超参数将帮助您改进模型。

这是一个机器学习的例子。在一个人工神经网络(ANN), hyperparameters变量,确定网络的结构,如隐藏层的人工神经元的数量和人工神经元的数量在每一层,或者变量定义一个模型是如何训练,如学习速率,这是学习过程的速度。

Hyperparameters定义之前学习的过程开始了。相反,人工神经网络的参数是每个人工神经元连接的系数或权值,并对其进行调整训练过程。

deeplearning
典型的
神经网络
体系结构

超参数是在开始训练或学习过程之前确定的模型参数,它位于模型外部;换句话说,如果您想要更改一个,您需要手动执行。自行车座椅不会自动调整,你会想在出发前调整;在机器学习模型中,它将根据验证数据集进行调整。相反,其他参数是在使用训练数据集的训练过程中确定的。

训练和测试模型所需的时间取决于它的超参数,而超参数较少的模型更容易验证或适应,因此可以减少验证数据集的大小。

非凸曲面的例子

大多数机器学习问题都是这样非凸.这意味着根据我们选择的超参数的值,我们可以得到一个完全不同的模型,而通过改变超参数的值,我们可以找到不同的、更好的模型。这就是为什么如果您想要迭代不同的超参数以找到最适合您分析的模型,那么验证数据集非常重要。

如果你想了解更多关于超参数的知识,Adam Filion关于超参数优化的视频(上面)是一个很好的概述,在5分钟内。

感谢大家的阅读。如果你有一个关于机器学习的问题,你想在这个专栏中回答,请将它添加到下面的表格中。

谢谢你的建议!