我想知道在进行K折交叉验证后如何选择预测模型。
这句话可能有些尴尬,所以让我更详细地解释一下:每当我进行K折交叉验证时,我都会使用K个训练数据子集,最后得到K个不同的模型。
我想知道如何选择K个模型中的一个,以便可以将其呈现给某人并说“这是我们可以生产的最好的模型”。
可以选择K个型号中的任何一个吗?还是涉及某种最佳实践,例如选择实现中位数测试误差的模型?
我想知道在进行K折交叉验证后如何选择预测模型。
这句话可能有些尴尬,所以让我更详细地解释一下:每当我进行K折交叉验证时,我都会使用K个训练数据子集,最后得到K个不同的模型。
我想知道如何选择K个模型中的一个,以便可以将其呈现给某人并说“这是我们可以生产的最好的模型”。
可以选择K个型号中的任何一个吗?还是涉及某种最佳实践,例如选择实现中位数测试误差的模型?
Answers:
我认为您对交叉验证的目的尚缺乏理解。
让我们直接讲一些术语,通常当我们说“模型”时,我们指的是一种特定的方法,用于描述某些输入数据与我们要预测的内容之间的关系。通常,我们通常不会将该方法的特定实例称为不同的模型。因此,您可能会说“我有线性回归模型”,但是不会将两组不同的训练系数称为不同模型。至少不是在模型选择的情况下。
因此,当您进行K折交叉验证时,您正在测试模型能够通过某些数据进行训练的能力,然后预测未看到的数据。我们为此使用交叉验证,因为如果您使用所拥有的所有数据进行训练,那么您将没有任何数据可以进行测试。您可以执行一次操作,例如使用80%的数据进行训练而使用20%的数据进行测试,但是如果您碰巧选择了20%的数据进行测试会碰巧包含一堆特别容易(或特别困难)的点,该怎么办?预测?我们将不会对模型的学习和预测能力提出最佳估计。
我们要使用所有数据。因此,继续上面的80/20拆分示例,我们将通过对80%的数据进行5次训练并对20%的数据进行测试,进行5次交叉验证。我们确保每个数据点仅在20%测试集中结束一次。因此,我们已经使用每个数据点来帮助理解我们的模型执行从某些数据中学习并预测一些新数据的任务的效果。
但是交叉验证的目的不是要提出最终模型。我们不使用我们训练后的模型的这5个实例来进行任何真实的预测。为此,我们要使用所有数据,我们必须提供最佳模型。交叉验证的目的是模型检查,而不是模型构建。
现在,假设我们有两个模型,例如线性回归模型和神经网络。我们如何说哪种模式更好?我们可以进行K折交叉验证,看看哪种方法在预测测试设定点方面更有效。但是,一旦我们使用交叉验证来选择性能更好的模型,便会在所有数据上训练该模型(无论是线性回归还是神经网络)。对于最终的预测模型,我们不使用在交叉验证过程中训练的实际模型实例。
请注意,有一种称为引导程序聚合的技术(通常简称为“装袋”),该技术使用以类似于交叉验证的方式生成的模型实例来构建集成模型,但这是一种超出范围的高级技术。您的问题在这里。
For that we want to use all the data we have to come up with the best model possible.
使用K折交叉验证进行网格搜索时,这是否意味着您将使用网格搜索找到的最佳参数并将模型拟合整个训练数据,然后使用测试集评估泛化性能?
除了Bogdanovist的回答,让我提出几点意见
如您所说,您训练了不同的模型。它们的区别在于,训练数据的1 /(k-1)与其他情况进行了交换。这些模型有时称为代理模型,因为针对这些模型测得的(平均)性能被视为在所有情况下训练的模型的性能的替代。
现在,在此过程中有一些假设。
假设1:替代模型等效于“整个数据”模型。
打破这种假设是很常见的,其症状是众所周知的倍交叉验证(或其他基于重采样的验证方案)的悲观偏见。如果学习曲线仍然具有正斜率(即较少的训练样本会导致较差的模型),则替代模型的性能平均比“整体数据”模型的性能差。
假设2是假设1的较弱版本:即使代理模型平均比整个数据模型差,我们也假设它们彼此等效。这样可以将代理模型的测试结果汇总为一个平均性能。
模型的不稳定性导致此假设的失效:在训练案例上训练的模型的真实性能差异很大。您可以通过执行倍交叉验证(对个子集的新随机分配)的迭代/重复并查看同一情况下不同代理模型的预测之间的方差(随机差异)来衡量此结果。N k − 1
ķķ
有限数量的案例意味着性能测试将由于有限数量的测试案例而受到随机误差(方差)的影响。这种方差源不同于(因此增加了)模型不稳定方差。
观察到的性能差异是由于这两个差异来源所致。
您考虑的“选择”是一个数据集选择:选择一个替代模型意味着选择训练样本的子集,并声称该训练样本的子集会产生上级模型。尽管可能确实如此,但通常“虚伪”是虚假的。无论如何,由于选择“最佳”替代模型是数据驱动的优化,因此您需要使用新的未知数据来验证(衡量性能)该选择的模型。此交叉验证中的测试集不是独立的,因为它用于选择代理模型。
您可能想看一下我们的论文,它是关于分类的,通常情况比回归要糟糕。但是,它显示了这些方差和偏差源是如何相加的。
Beleites,C.和Neugebauer,U.和Bocklitz,T.和Krafft,C.和Popp,J .:分类模型的样本规模规划。肛门Chim Acta,2013,760,25-33。
DOI:10.1016 / j.aca.2012.11.007
在arXiv上接受的手稿:1211.1323
picking "the best" of the surrogate models is a data-driven optimization, you'd need to validate (measure performance) this picked model with new unknown data. The test set within this cross validation is not independent as it was used to select the surrogate model.
,他说But once we have used cross-validation to select the better performing model, we train that model (whether it be the linear regression or the neural network) on all the data.
这很普遍,并且指定一种标准化的方法至关重要
我发现这篇出色的文章《如何训练最终的机器学习模型》对消除我在机器学习中使用CV的所有困惑非常有帮助。
基本上,我们使用CV(例如80/20分割,k倍等)来估计您的整个过程(包括数据工程,模型选择(即算法)和超参数等)在未来看不见的情况下的表现如何数据。一旦您选择了获胜的“程序”,CV的拟合模型便已达到目的,现在可以丢弃。然后,您使用相同的获胜“过程”,并使用整个数据集训练最终模型。
这是一个非常有趣的问题。为了清楚起见,我们应该了解模型和模型评估的区别。我们使用完整的训练集来构建模型,并且我们希望最终会使用该模型。
K折交叉评估将建立K模型,但所有模型都将被丢弃。K模型仅用于评估。它只是产生了指标,以告诉您该模型与数据的吻合程度。
例如,您选择LinearRegression算法并在同一训练集上执行两项操作:一项具有10倍交叉验证,另一项具有20倍交叉验证。回归(或分类器)模型应该相同,但相关系数和根相对平方误差不同。
以下是使用weka进行10倍和20倍交叉验证的两次运行
第一轮10折
=== Run information ===
Test mode: 10-fold cross-validation
...
=== Classifier model (full training set) ===
Linear Regression Model <---- This model is the same
Date = 844769960.1903 * passenger_numbers -711510446549.7296
Time taken to build model: 0 seconds
=== Cross-validation === <---- Hereafter produced different metrics
=== Summary ===
Correlation coefficient 0.9206
Mean absolute error 35151281151.9807
Root mean squared error 42707499176.2097
Relative absolute error 37.0147 %
Root relative squared error 38.9596 %
Total Number of Instances 144
第二次跑20折
=== Run information ===
...
Test mode: 20-fold cross-validation
=== Classifier model (full training set) ===
Linear Regression Model <---- This model is the same
Date = 844769960.1903 * passenger_numbers -711510446549.7296
Time taken to build model: 0 seconds
=== Cross-validation === <---- Hereafter produced different metrics
=== Summary ===
Correlation coefficient 0.9203
Mean absolute error 35093728104.8746
Root mean squared error 42790545071.8199
Relative absolute error 36.9394 %
Root relative squared error 39.0096 %
Total Number of Instances 144
我不确定以上讨论是否完全正确。在交叉验证中,我们可以将每次运行的数据分为培训和测试。仅使用训练数据,就需要拟合模型并在所考虑的每一类模型中选择调整参数。例如,在神经网络中,调整参数是神经元的数量和激活功能的选择。为此,仅在训练数据中进行交叉验证。
一旦找到每个类别中的最佳模型,便会使用测试数据评估最佳拟合模型。“外部”交叉验证循环可用于更好地评估测试数据性能以及评估可变性。然后,讨论可以比较不同类别(例如神经网络与SVM)的测试性能。选择一个模型类,并固定模型大小,现在使用全部数据来学习最佳模型。
现在,如果作为机器学习算法的一部分,您想要不断地选择最佳的模型类别(例如每周一次),那么即使是这种选择也需要在训练数据中进行评估!如果测试数据测量是动态选项,则不能用于判断模型类别的选择。