Weka中的交叉验证

Tit*_*llo 28 validation fold weka

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

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

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

Rus*_*ams 51

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

使用训练集

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

使用10倍CV

  • Weka需要100个标记数据

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

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

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

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

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

  • @ Lazza87,你的链接已经死了,请你更新一下吗?谢谢 (4认同)
  • 因此,对于社区,我很抱歉,我不知道Weka为您提供相同的模型,无论您选择训练集还是10倍CV.我对我的答案和评论进行了必要的更正,以便没有人得到我之前关于Weka的误解,尽管这是ML社区的常规做法,可以报告最佳模型或10倍CV的平均模型.我知道Weka提供了平均模型,但我完全错了.谢谢@ Lazza87. (3认同)

Hei*_*löd 9

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

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

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

  • 但交叉验证的目的是什么?如果给用户的最终模型基于完整数据集,为什么我们需要交叉验证?我认为交叉验证是找到最好的模型 (2认同)

小智 5

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

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