我一直在想,我读到的交叉验证是这样执行的:
在k倍交叉验证中,原始样本被随机分成k个子样本。在k个子样本中,保留单个子样本作为用于测试模型的验证数据,并且剩余的k-1个子样本用作训练数据。然后将交叉验证过程重复k次(折叠),其中每个k个子样本仅使用一次作为验证数据。然后可以对折叠的k结果进行平均(或以其他方式组合)以产生单个估计
所以建立了k个模型,最后一个是平均值。在Weka指南中写道,每个模型总是使用所有数据集构建。那么Weka中的交叉验证如何工作呢?是否根据所有数据构建模型,“交叉验证”意味着创建了k折叠,然后对其进行评估,最终输出结果只是折叠的平均结果?
所以,再次出现这种情况:您有100个标记数据
使用训练集
使用10倍CV
如果这回答了你的问题,请告诉我。
我会在评论中回答,但我的声誉仍然不允许我:
除了Rushdi接受的答案之外,我想强调的是,在进行性能测量并进行平均后,为交叉验证折叠集创建的模型都被丢弃。
无论您的测试选项如何,生成的模型始终基于完整的训练集。由于M-T-A要求更新引用的链接,因此它是:https://web.archive.org/web/20170519110106/http://list.waikato.ac.nz/pipermail/wekalist/2009-December/046633.html/。这是WEKA维护者之一的答案,指出了我写的内容。
我想我明白了。拿(例如)weka.classifiers.rules.OneR -x 10 -d outmodel.xxx
。这有两件事:
outmodel.xxx
的模型。此模型不用作交叉验证的一部分。Weka遵循您在此处提到的传统k折交叉验证。你有完整的数据集,然后将其分成相等的k个k(k1,k2,...,k10,例如10倍CV),没有重叠。然后在第一次运行时,将k1到k9作为训练集并开发模型。在k10上使用该模型以获得性能。接下来是k1到k8和k10作为训练集。从它们开发一个模型并将其应用于k9以获得性能。这样,使用所有折叠,其中每次折叠最多1次用作测试集。
然后Weka平均表演并在输出窗格上显示。
一旦我们通过划分10个段中的数据并创建决策树并进行评估来完成10次交叉验证,Weka所做的就是在整个数据集上第11次运行算法。然后,这将生成我们可能在实践中部署的分类器。我们使用10倍交叉验证来获得评估结果和估计误差,然后我们再次进行分类以获得实际使用的实际分类器。在第k次交叉验证期间,我们将使用不同的决策树,但是在整个数据集上创建最终的一个。 CV用于查看我们是否存在过度拟合或大差异问题。