如何在多类数据集上准确划分训练集以进行 k 折交叉验证?

机器算法验证 机器学习 支持向量机 交叉验证 验证 图像处理
2022-03-30 16:53:46

交叉验证是最重要的工具之一,因为它可以让我们诚实地评估系统的真实准确性。换句话说,交叉验证过程可以更准确地描述我们系统的真实准确性。

例如,如果我们有一个包含一个类的数据集(让我们考虑一个人脸数据集):

在这种情况下,我们将数据集划分为k folds(或k portions)。k 的常见值为 10,因此在这种情况下,我们会将数据集分为 10 个部分。我们将运行k rounds交叉验证。在每一轮中,我们使用一个折叠进行验证,其余折叠用于训练。在训练我们的分类器之后,我们在验证数据上测量它的准确性。平均精度k rounds以获得最终的交叉验证精度。

Prepare our dataset
Divide it into 10 folds.
for i=1:10 % ten times
fold(i) for testing
the remaining for training 
end
Final accuracy = Average(Round1, Round2, ...., Round10). 

否则,如果我们有一个包含多个类别的数据集(让我们考虑 3 个类别:面孔、飞机和草莓类别):

我不知道我的意见是否正确:三个类别中的每一个都分为 10 折。我们是否像上面那样测量最终的准确度?例如:

For the first round: take the first folds from the first, second and third categories and use them as testing and all the remaining folds (from all the categories) as training.  

For the second round: take the second folds from the first, second and third categories and use them as testing and all the remaining folds (from all the categories) as training.

etc. until the round 10...

这是正确的吗?我的意见正确吗?请我需要你的帮助和解释。

任何帮助将不胜感激。

2个回答

首先,您需要决定是否需要模型/参数选择,或者只是模型。固定模型后,引导程序似乎更适合确定建模过程的执行方式。

如果您在多个数据集上实施交叉验证,只需随机划分数据而不考虑它们的标签。有时测试数据集中的一个标签甚至可能没有得到训练,它会计入验证错误。通常强烈建议 10 倍交叉验证重复 50-100 次以保持稳定性。

您可能会尝试避免类不平衡问题(从而间接降低上述排除标签事件的几率),但如果您的数据真的遇到这个问题,我在这篇文章中的先前回答中有几种重新采样策略。

我认为您通常不希望将已知分类纳入训练和测试样本的选择中。如果你这样做,测试样本中每个类的比例将始终与用于训练你的机器的样本中的比例相同,但你实际上希望训练和测试之间的抽样变化,以查看分类器在像这样的真实情况。基本上,只需将您的数据集随机划分为 10 折,而忽略分类变量。