在MATLAB中将数据拆分为训练/测试数据集?

时间:2009-09-03 07:05:23

标签: matlab data-mining

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

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

4 个答案:

答案 0 :(得分:2)

扩展@Mr Fooz's answer

  

根据cvpartition和crossvalind的官方文档,它们看起来非常相似,但是crossvalind看起来稍微灵活一点(它允许M为任意M,而cvpartition只允许1离开)。

...是不是真的可以使用具有适当k值的kfold交叉验证来模拟离开M-out(将数据分成k折叠,在一个上测试,在所有其他上训练,并执行此操作所有折叠并取平均值)因为留一出是kfold的一个特例,其中k =观察数量?

答案 1 :(得分:2)

Amro,这不是您cvpartition vs crossvalind问题的直接答案,但是用户Sebastian Paris在Mathworks文件交换中有一个名为MulticlassGentleAdaboosting的贡献包括一个很好的用于枚举数组索引的函数集,用于计算以下采样和交叉验证策略的训练,测试和验证集:

  • 坚持
  • 自举
  • K交叉验证
  • 离开One Out
  • 分层交叉验证
  • 平衡分层交叉验证
  • 分层坚持
  • 分层引导带

有关详细信息,请参阅包中包含的演示文件,更具体地说,请参阅函数sampling.msampling_set.m

答案 2 :(得分:1)

根据cvpartitioncrossvalind的官方文档,它们看起来非常相似,但是crossvalind看起来稍微灵活一点(它允许M为任意M而离开,而cvpartition只允许离开1出)。

答案 3 :(得分: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.