在MATLAB中将数据分割成训练/测试数据集?

9

通过一些研究,我在MATLAB中找到了两个函数来完成任务:

现在我之前使用过cvpartition来创建n折交叉验证子集,还使用了统计工具箱中的Dataset/Nominal类。所以我想知道这两者之间有什么区别,以及各自的优缺点是什么?

4个回答

3

扩展@Mr Fooz的答案

根据cvpartition和crossvalind的官方文档,它们看起来非常相似,但crossvalind似乎更加灵活(它允许对任意M进行留出M个数据的操作,而cvpartition只允许留出一个数据)。

...难道不是真的吗?你总是可以使用适当的k值(将数据分为k折,在其中一折上测试,在其他所有折上进行训练,并在所有折中重复此过程并取平均值),通过kfold交叉验证模拟留下M个数据,因为留下一个数据是kfold的一种特殊情况,其中k=观测数量吗?


3
Amro,这并不是直接回答你关于 cvpartitioncrossvalind 的问题,但是在Mathworks文件交换中心中有一个贡献者Sebastian Paris上传了一个名为MulticlassGentleAdaboosting的项目包,其中包括一组很好的函数用于枚举数组索引以计算以下抽样和交叉验证策略的训练、测试和验证集:
  • 留出法
  • 自助法
  • K折交叉验证
  • 留一法
  • 分层交叉验证
  • 平衡分层交叉验证
  • 分层留出法
  • 分层自助法

有关详细信息,请参见包中包含的演示文件,尤其是函数sampling.msampling_set.m


1

根据cvpartitioncrossvalind的官方文档,它们看起来非常相似,但是crossvalind似乎更加灵活(它允许任意M个样本离开,而cvpartition只允许一个样本离开)。


1

我知道你的问题并不直接涉及神经网络工具箱,但也许其他人会发现这很有用。要将ANN输入数据分离为测试/验证/训练数据,请使用“net.divideFcn”变量。

net.divideFcn = 'divideind';

net.divideParam.trainInd=1:94;  % The first 94 inputs are for training.
net.divideParam.valInd=1:94;    % The first 94 inputs are for validation.
net.divideParam.testInd=95:100; % The last 5 inputs are for testing the network.

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