模型验证是机器学习的一项基础技术。如果使用正确,它将帮助你评估你的机器学习模型对新数据的反应。这在两个方面有帮助:
当我们使用手头的数据集来处理问题时,找到正确的机器学习算法来创建我们的模型是非常重要的。每种模式都有自己的优缺点。例如,一些算法对小数据集有更高的容忍度,而另一些算法则擅长处理大量的高维数据。因此,使用相同数据集的两个不同模型可以预测不同的结果,具有不同的精度。
为数据找到最佳模型是一个交互过程,包括测试不同的算法以最小化模型误差。控制机器学习算法行为的参数被调用hyperparameters. 取决于您为超参数选择的值,您可能会得到一个完全不同的模型。因此,通过调优超参数的值,您可以找到不同的,希望是更好的 模型。
在没有模型验证的情况下,很容易在您没有意识到的情况下调优您的模型,使其开始过拟合。你的训练算法应该调整参数以最小化损失函数,但有时它做得太过了。当这种情况发生时,模型变成overfit也就是说,它过于复杂,不能很好地处理新数据。我将在第三个问题中更深入地讨论这个问题。
要测试您的模型对新数据的工作效果如何,您可以使用模型验证,方法是对数据集进行分区,并使用子集来训练算法,并使用其余数据来测试它。
因为模型验证不会使用所有的数据来建立模型,所以它是在训练期间防止过拟合的常用方法。
现在,第一个问题。
实际上,测试和训练数据集是不同的。当我在前面介绍模型验证时,我讨论了模型验证如何将数据划分到这两个子集中,所以让我深入讨论一下。
模型验证使用将数据随机分成不同的子集通过调整模型以正确响应新输入来降低模型过拟合的风险。两个典型的数据子集是:
由于我们需要在两个数据集中反映模型的复杂性和多样性,所以需要对它们进行随机划分。这种方法也将降低模型过拟合的风险,并为我们提供一个更准确但更简单的模型来产生研究结果。
如果我们用一个非随机选择的数据集训练模型,模型将会为数据的特定子集训练得很好。问题是这个非随机数据不能代表我们想要应用模型的其他数据或新数据。例如,假设我们正在分析一个城镇的能源消耗。如果我们使用的数据集进行训练和测试不是随机的,只有周末能源消耗的数据,通常低于工作日,当我们将模型应用于新的数据,如月,它不会是准确的,因为它只代表了周末。
让我用一个调整到训练数据集的两个模型的例子来说明这一点。我要用一个基本的例子84%的准确率
100%的准确率
您可以看到,复杂模型更好地适应训练数据,其性能为100%,而简单模型的性能为84%。人们很容易宣布复杂的模式是赢家。然而,让我们看看如果我将测试数据集(训练期间没有使用的新数据)应用到这些模型的结果:
70%的准确率
60%的准确率
当我比较两个模型的性能时,我的简单模型的准确率从84%下降到70%;然而,这一变化远没有复杂模型中40点的降幅(100% - 60%)那么显著。总之,简单模型对于此分析来说更好、更准确,而且它还演示了使用测试数据集来评估模型是多么重要。
最后,另一个建议。为了减少可变性,使用数据集的不同分区进行多轮模型验证,以使模型更好地适应您的分析。这种技术叫做k-fold交叉验证.可怜的、被误解的验证集。这是一个常见的问题。没有人(通常!)质疑训练和测试集的必要性,但是我们也不清楚为什么要划分验证集。简单的回答是,在调优超参数以查看调优是否有效时使用验证集——换句话说,在完整的模型上进行迭代。然而,有时这个术语验证设置错误地用于表示测试数据集。关于验证数据集为什么有用,这里有一个更完整的答案:
总而言之,训练数据集训练我们现有的不同算法,验证数据集比较不同算法(使用不同超参数)的性能,并决定采用哪种算法。测试数据集给出了特定模型的准确性、灵敏度和性能。
这是个好问题。在本专栏的介绍中,我简要地提到过超参数控制机器学习算法的行为。现在我要更深入地讲一下。
你可以把超参数想象成一辆自行车的部件:我们可以改变影响系统性能的东西。假设你买了一辆二手自行车。车架的尺寸是合适的,但如果你调整座椅高度,拧紧或松开刹车,给链条上油,或者根据你的地形安装合适的轮胎,自行车可能会更有效率。外部因素也会影响你的旅行,但是骑着优化的自行车从A点到B点会更容易。类似地,调优超参数将帮助您改进模型。
这是一个机器学习的例子。在一个人工神经网络(ANN), hyperparameters变量,确定网络的结构,如隐藏层的人工神经元的数量和人工神经元的数量在每一层,或者变量定义一个模型是如何训练,如学习速率,这是学习过程的速度。
Hyperparameters定义之前学习的过程开始了。相反,人工神经网络的参数是每个人工神经元连接的系数或权值,并对其进行调整在训练过程。
超参数是在开始训练或学习过程之前确定的模型参数,它位于模型外部;换句话说,如果您想要更改一个,您需要手动执行。自行车座椅不会自动调整,你会想在出发前调整;在机器学习模型中,它将根据验证数据集进行调整。相反,其他参数是在使用训练数据集的训练过程中确定的。
训练和测试模型所需的时间取决于它的超参数,而超参数较少的模型更容易验证或适应,因此可以减少验证数据集的大小。
大多数机器学习问题都是这样非凸.这意味着根据我们选择的超参数的值,我们可以得到一个完全不同的模型,而通过改变超参数的值,我们可以找到不同的、更好的模型。这就是为什么如果您想要迭代不同的超参数以找到最适合您分析的模型,那么验证数据集非常重要。
如果你想了解更多关于超参数的知识,Adam Filion关于超参数优化的视频(上面)是一个很好的概述,在5分钟内。