10倍交叉验证

10

K折交叉验证的步骤如下:

将数据分成大约相等大小的k个子集。你要训练神经网络k次,每次从训练中留出一个子集,但仅使用被省略的子集来计算任何感兴趣的误差标准。如果k等于样本大小,则称为“留一法”交叉验证。“留v法”是一个更复杂、更昂贵的交叉验证版本,它涉及留出所有可能的包含v个案例的子集。

术语“training”和“testing”是什么意思?我不理解。

你能告诉我一些参考资料吗?可以提供一个示例来学习这个算法吗?

Train classifier on folds: 2 3 4 5 6 7 8 9 10; Test against fold: 1
Train classifier on folds: 1 3 4 5 6 7 8 9 10; Test against fold: 2
Train classifier on folds: 1 2 4 5 6 7 8 9 10; Test against fold: 3
Train classifier on folds: 1 2 3 5 6 7 8 9 10; Test against fold: 4
Train classifier on folds: 1 2 3 4 6 7 8 9 10; Test against fold: 5
Train classifier on folds: 1 2 3 4 5 7 8 9 10; Test against fold: 6
Train classifier on folds: 1 2 3 4 5 6 8 9 10; Test against fold: 7
Train classifier on folds: 1 2 3 4 5 6 7 9 10; Test against fold: 8
Train classifier on folds: 1 2 3 4 5 6 7 8 10; Test against fold: 9
Train classifier on folds: 1 2 3 4 5 6 7 8 9;  Test against fold: 10  

请参阅维基百科上的交叉验证常见类型 - Ilmari Karonen
2个回答

25

简单来说: 训练是提供反馈信息以调整分类器的预测能力的过程。

测试是确定由算法生成的分类器的实际准确性的过程。在测试过程中,对分类器提供之前从未见过的数据实例进行最终确认,以检查分类器的准确性是否与训练期间的准确性差异不大。

但是,你忽略了一个关键步骤:验证 (这是你在10折/ k折交叉验证中所指的)。

验证通常是在每次训练步骤后执行,以帮助确定分类器是否被过度拟合。验证步骤不会向算法提供任何反馈以调整分类器,但它有助于确定是否发生了过度拟合,并在训练应该终止时发出信号。

可以按以下方式考虑该过程:

1. Train on the training data set.
2. Validate on the validation data set.
if(change in validation accuracy > 0)
   3. repeat step 1 and 2
else
   3. stop training
4. Test on the testing data set.

15

在k-fold方法中,您需要将数据分成k个段,其中k-1个用于训练,而一个留出来用于测试。重复这个过程k次,第一次使用第一段进行测试,其余的用于训练,然后使用第二段进行测试,其余的用于训练,以此类推。正如您在10折交叉验证的示例中所看到的那样,应该很简单,请再次阅读。

现在我们来介绍训练和测试:

分类中的训练是创建分类模型的部分,使用某些算法,常用的算法包括ID3、C4.5等。

测试是通过在测试数据上运行模型来评估分类模型,然后创建混淆矩阵,并计算模型的准确性和错误率。

在K-fold方法中,会创建k个模型(如上面的描述所示),并选择最精确的分类模型。


谢谢SpeedBirdNine,两个都很完美,我选择了更早的那一个。 - Nickool
4
“最准确的分类模型是所选择的模型。”我不同意这个说法。k折交叉验证的目的是通过计算在所有k个分区上的平均性能(准确度或其他指标)来测试模型性能,避免数据集划分的偏见影响结果。如果您选择了最佳分区,就完全会对结果产生偏差,并且如果您正在撰写科学论文(例如...),您的同行不应该因此接受该论文。 - Dr. Jekyll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接