机器学习问题

问并回答


由Laura Martinez Molera


所有关于模型验证

这些列将看一个主题,解释一些背景,并回答一些我从Matlab和Simulink社区听到的问题。金宝app

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

1.为什么我的模型的准确性变得更糟?

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

3.用于使用的验证数据集?

4.如何在没有过度装箱的情况下改善我的模型?

模型验证是机器学习的基础技术。正确使用时,它将帮助您评估机器学习模型将如何对新数据作出反应。这有助于两种方式:

  • 它可以帮助您找出要使用的算法和参数。
  • 它可以防止在训练期间过度装备。

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

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

如果没有模型验证,它很容易将模型调整到它在没有实现它的情况下开始过度装备的程度。您的培训算法应该调整参数以最小化损耗函数,但有时它会走得太远。发生这种情况时,模型变成了overfit也就是说,它过于复杂,不能很好地处理新数据。我将在第三个问题中更深入地讨论这个问题。

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

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

现在,第一个问题。

如果您想要了解与Matlab相关的模型验证和HyperParameter优化相关的功能和语法的详细信息,请参阅
模型建立与评估

问1

问题一

我的模型与训练数据很好,但是当我给它新数据时,结果并不好。我该如何解决?

这听起来像你过度装过你的模型,这意味着你的模型完全对齐到训练集,但不知道如何响应新的输入或数据。该模型对您用于培训模型的数据集响应“太好”。

开始时,由于训练集的错误非常低,因此似乎是非常有希望的。但是,测试集的错误更高,模型变得更加准确。

过度建模的最常见原因是培训数据不足,因此解决此问题的最佳解决方案是收集更多数据并更好地培训模型。但是,您不仅需要更多数据,您还需要确保此数据足够代表,足以模型的复杂性和多样性,因此模型将知道如何响应它。

一个复杂模型的图像,它将覆盖数据

问2

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

事实上,测试和培训数据集是不同的。当我之前介绍了模型验证时,我讨论了模型验证如何将数据分区分为这两个子集,因此让我潜入其中有点。

模型验证使用随机划分不同子集中的数据通过调整模型来缩短模型以正确响应新输入的风险。两个典型的数据子集是:

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

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

如果我们用一个非随机选择的数据集训练模型,那么该模型将对该数据的特定子集进行培训。问题是此非随机数据不会表示要将模型应用到的数据或新数据的其余部分。例如,我们正在分析一个城镇的能量消耗。If the dataset we use for training and testing is not random and only has data from the weekend energy consumption, which is generally lower than weekdays, when we apply the model to new data such as a new month, it won’t be accurate since it will only represent the weekends.

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

简单的模型

高精度84%

复杂模型

100%准确性

您可以看到复杂模型更好地适应培训数据,其性能为简单模型的84%。宣布复杂的模型令人诱人的胜利者。但是,如果我将测试数据集(培训期间未使用的新数据)应用于这些模型,让我们看看结果:

简单的模型

70%的准确率

复杂模型

60%的准确性

当我比较两种模型的性能时,我的简单模型的准确性从84%下降到70%;然而,这种变化比复杂模型(100%至60%)所见的40点下降得多。总之,简单的模型对该分析更好,更准确,并且还展示了具有测试数据集的重要性以评估模型。

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

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

问3

我以为我只是需要训练和测试数据集;还有必要的验证数据集吗?我真的需要再次分割我的数据吗?

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

  • 验证集- 此数据集用于在调整模型的超参数时评估模型的性能。此数据用于更频繁的评估,用于更新HyperParameters,因此验证集间接影响模型。它不仅仅是调整模型的超级参数,但通常建议。
  • 测试集- 此数据集用于提供对培训集中最终模型的无偏见评估。只有在型号完全培训并不会影响模型时才使用此集合;这只是计算性能。

作为摘要,训练数据集列达我们可用的不同算法,验证数据集比较了不同算法的性能(具有不同的超参数)并决定要采取的算法。测试数据集提供了特定模型的准确性,灵敏度和性能。

问4

我想改善我的模型,但我害怕过度装饰。我能做什么?

这是一个很好的问题。在介绍本专栏中,我简要介绍了超参数控制机器学习算法的行为。我现在会更深入地进入这一点。

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

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

Quand参数定义学习过程开始。相反,ANN的参数是调节的每个人造神经元连接的系数或重量训练过程。

Deeplearning.
典型的
神经网络
建筑学

HyperParameter是在开始培训或学习过程之前确定的模型的参数,并且在模型外部;换句话说,如果要更改一个,则需要手动执行此操作。自行车座椅不会自行调整,您将在脱落之前做到这一点;在机器学习模型中,它将使用验证数据集进行调整。相比之下,在培训过程中使用训练数据集确定其他参数。

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

非凸面的例子

大多数机器学习问题都是这样非凸.这意味着,根据我们选择的值,我们可以获得完全不同的模型,并通过更改超级参数的值,我们可以找到不同和更好的模型。这就是为什么验证数据集很重要,如果要迭代不同的超参数,以查找分析的最佳模型。

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

想要更多?

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

谢谢你的建议!