术语 - 分类任务的交叉验证、测试和验证集

数据挖掘 分类 交叉验证 matlab 术语
2022-03-02 06:42:05

困惑1)如果k=10这是否意味着90%用于训练而10%用于测试?所以我们总是有k%测试?

Confusion2) 在下面的代码中,我使用了 10 折交叉验证来训练支持向量机 (SVM)。一般来说,数据集将分为(a)训练集,meas(trainIdx,:)(b)测试集,meas(testIdx,:)c)验证集。在交叉验证方法中,我通过在循环内进行训练和验证来构建 SVM 学习器。根据我的理解,验证数据必须与训练和测试完全不同。但是,在许多在线资源中,据说在交叉验证之后,必须在整个数据集上重新训练,在这个例子中是meas(:,1:end). 如果是这样,那么svmModel交叉验证中的学习模型就会丢失。我完全误解了吗?

交叉验证结束后,有人可以展示分类的下一步吗?

2个回答

混乱 1)

来自维基百科:

k 折交叉验证是一种评估统计分析结果如何推广到独立数据集的技术

他们还说:

在 k 折交叉验证中,原始样本被随机划分为 k 个大小相等的子样本。在 k 个子样本中,保留一个子样本作为验证数据用于测试模型,剩余的 k-1 个子样本用作训练数据。然后交叉验证过程重复 k 次,k 个子样本中的每个子样本仅使用一次作为验证数据。然后可以对 k 个结果进行平均以产生单个估计。这种方法相对于重复的随机子抽样(见下文)的优势在于所有的观测值都用于训练和验证,并且每个观测值只用于验证一次。通常使用 10 折交叉验证,[7] 但一般来说,k 仍然是一个不固定的参数。

因此,您现在看到您没有 k% 用于测试,但您始终使用数据集的 1/k% 作为测试集。注意:您可以选择保留 2/k 或更多,但编码会复杂得多。

混乱 2)

在 scikit learn 中,他们首先将此工具称为“评估性能工具”,这与维基百科作者的建议相反。关键是CV 允许您 根据您的初始数据集评估您的预测的稳健性和可靠性。

在 CV 结束时获得的最终平均值是 k 个测试集的平均分数。查看所有中间结果以评估它们的方差通常是一件好事,这在您的模型泛化能力较差的情况下可能是一个很好的解释性估计。

编辑:为什么在简历之后进行另一次培训

交叉验证也可以用作优化工具来找到模型的最佳超参数。在这种情况下,您应该采用更好的超参数(在 k 个不同的参数中;每个折叠一个)并使用它们对整个集合进行预测,以查看优化的(即从 CV 中选择的)超参数是否良好在完整的数据集上。“最佳”参数的概念可以看作是模型中在您的 CV 过程中给出最佳分数的超参数。

请注意,您仍然可以将数据集中的验证集放在一边,您不会在其上进行 CV。此验证集可用作模型预测质量的最后测试。另请参阅此处

最后,您可以使用每个 k 折模型来预测估计值,然后按照维基百科作者的建议将它们的平均值作为模型的最终预测,但这种想法更接近于集成学习或一种无需替换的Bootstrap 方法, 而不是 CV

希望能帮助到你

混淆 1)如果 k=10 那么这是否意味着 90% 用于训练,10% 用于测试?所以我们总是有 k% 用于测试吗?

不,我们没有用于测试的 k%。这意味着您的数据(训练集)被分成 k 个相等的部分,其中一部分用于验证集,其余部分组合成训练集。如果您仍有疑问,请将 k 的值更改为任何其他数字,例如 5 或 8,并在创建 k 折叠后,打印训练集和验证集的形状。

它也不是用于测试,它实际上是用于验证(这就是名称交叉验证的原因)。

混乱 2)

就个人而言,我没有遇到任何资源说你必须重新训练整个数据。你是对的,交叉验证中的模型会丢失,因为模型学习的参数将被新的参数值替换。

交叉验证后的下一步是选择最佳模型并继续进行。

我想你会在这里找到很多讨论 - https://stats.stackexchange.com/questions/52274/how-to-choose-a-predictive-model-after-k-fold-cross-validation

以及是否在整个数据集上进行训练 - https://stats.stackexchange.com/questions/11602/training-with-the-full-dataset-after-cross-validation