29

我一直认为从我读到的交叉验证是这样执行的:

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

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

4

6 回答 6

52

所以,这又是一个场景:你有 100 个标记数据

使用训练集

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

使用10倍简历

  • Weka 需要 100 个标记数据

  • 它产生 10 个相同大小的集合。每组分为两组:90 个标记数据用于训练,10 个标记数据用于测试。

  • 它使用来自 90 个标记数据的算法生成一个分类器,并将其应用于集合 1 的 10 个测试数据。

  • 它对集合 2 到 10 做同样的事情并产生 9 个以上的分类器

  • 它平均了从 10 个相同大小(90 个训练和 10 个测试)集产生的 10 个分类器的性能

让我知道这是否回答了您的问题。

于 2012-05-10T17:26:36.867 回答
11

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

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

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

于 2014-01-17T12:28:56.963 回答
5

我想我想通了。以(例如)weka.classifiers.rules.OneR -x 10 -d outmodel.xxx。这做了两件事:

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

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

然后 Weka 对性能进行平均并将其呈现在输出窗格上。

于 2012-05-04T00:02:03.770 回答
1

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

于 2019-02-28T17:50:38.537 回答
0

根据怀卡托大学的“使用 Weka 进行数据挖掘”:

交叉验证是一种改进重复坚持的方法。
交叉验证是一种进行重复保持的系统方法,实际上通过减少估计的方差来改进它。

  • 我们获取一个训练集并创建一个分类器
  • 然后我们正在评估该分类器的性能,并且该评估存在一定量的差异,因为它在下面都是统计的。
  • 我们希望将估计中的方差保持在尽可能低的水平。
    交叉验证是一种减少方差的方法,一种称为“分层交叉验证”的交叉验证变体可以进一步减少它。(与“重复保留”方法相反,我们保留 10% 用于测试,然后重复 10 次。)

那么 Weka 中的交叉验证是如何工作的呢?:
通过交叉验证,我们只将数据集划分一次,但我们划分为 k 块,例如 10 块。
然后我们取其中的 9 个用于训练,最后一个用于测试。然后用同样的划分,我们再取 9 块用于训练,留出的一块用于测试。我们做了 10 次整件事,每次都使用不同的部分进行测试。换句话说,我们将数据集分成 10 个部分,然后依次拿出这些部分进行测试,对其余部分进行训练,进行测试并平均 10 个结果。


那将是 10 倍交叉验证。将数据集分成 10 个部分(称为“折叠”);依次拿出每个部分;并对结果进行平均。因此,数据集中的每个数据点用于测试一次,用于训练 9 次
这是 10 倍交叉验证。

于 2021-10-19T13:50:51.367 回答