Set中的交叉验证

问题描述 投票:26回答:5

我一直在想,我读到的交叉验证是这样执行的:

在k倍交叉验证中,原始样本被随机分成k个子样本。在k个子样本中,保留单个子样本作为用于测试模型的验证数据,并且剩余的k-1个子样本用作训练数据。然后将交叉验证过程重复k次(折叠),其中每个k个子样本仅使用一次作为验证数据。然后可以对折叠的k结果进行平均(或以其他方式组合)以产生单个估计

所以建立了k个模型,最后一个是平均值。在Weka指南中写道,每个模型总是使用所有数据集构建。那么Weka中的交叉验证如何工作呢?是否根据所有数据构建模型,“交叉验证”意味着创建了k折叠,然后对其进行评估,最终输出结果只是折叠的平均结果?

validation weka fold
5个回答
50
投票

所以,再次出现这种情况:您有100个标记数据

使用训练集

  • weka将采用100个标记数据
  • 它将应用算法从这100个数据构建分类器
  • 它将分类器AGAIN应用于这100个数据
  • 它为您提供分类器的性能(应用于开发它的相同100个数据)

使用10倍CV

  • Weka需要100个标记数据
  • 它产生10个相同大小的集合。每组分为两组:90个标记数据用于训练,10个标记数据用于测试。
  • 它使用来自90个标记数据的算法生成分类器,并将其应用于集合1的10个测试数据。
  • 对于集合2到10,它做同样的事情,并产生9个以上的分类器
  • 它平均了10个同等大小(90个训练和10个测试)集合生成的10个分类器的性能

如果这回答了你的问题,请告诉我。


9
投票

我会在评论中回答,但我的声誉仍然不允许我:

除了Rushdi接受的答案之外,我想强调的是,在进行性能测量并进行平均后,为交叉验证折叠集创建的模型都被丢弃。

无论您的测试选项如何,生成的模型始终基于完整的训练集。由于M-T-A要求更新引用的链接,因此它是:https://web.archive.org/web/20170519110106/http://list.waikato.ac.nz/pipermail/wekalist/2009-December/046633.html/。这是WEKA维护者之一的答案,指出了我写的内容。


5
投票

我想我明白了。拿(例如)weka.classifiers.rules.OneR -x 10 -d outmodel.xxx。这有两件事:

  1. 它基于完整数据集创建模型。这是写给outmodel.xxx的模型。此模型不用作交叉验证的一部分。
  2. 然后运行交叉验证。交叉验证涉及创建(在这种情况下)10个新模型,其中对数据段进行了训练和测试,如上所述。关键是交叉验证中使用的模型是临时的,仅用于生成统计信息。它们不等同于或用于提供给用户的模型。

1
投票

Weka遵循您在此处提到的传统k折交叉验证。你有完整的数据集,然后将其分成相等的k个k(k1,k2,...,k10,例如10倍CV),没有重叠。然后在第一次运行时,将k1到k9作为训练集并开发模型。在k10上使用该模型以获得性能。接下来是k1到k8和k10作为训练集。从它们开发一个模型并将其应用于k9以获得性能。这样,使用所有折叠,其中每次折叠最多1次用作测试集。

然后Weka平均表演并在输出窗格上显示。


0
投票

一旦我们通过划分10个段中的数据并创建决策树并进行评估来完成10次交叉验证,Weka所做的就是在整个数据集上第11次运行算法。然后,这将生成我们可能在实践中部署的分类器。我们使用10倍交叉验证来获得评估结果和估计误差,然后我们再次进行分类以获得实际使用的实际分类器。在第k次交叉验证期间,我们将使用不同的决策树,但是在整个数据集上创建最终的一个。 CV用于查看我们是否存在过度拟合或大差异问题。

© www.soinside.com 2019 - 2024. All rights reserved.