9

经过一些研究,我在 MATLAB 中发现了两个函数来完成这项任务:

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

4

4 回答 4

3

扩展@Mr Fooz 的回答

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

...您是否总是可以使用具有适当 k 值的 kfold 交叉验证来模拟 leave-M-out (将数据分成 k 折,测试一个,训练所有其他的,并对所有折执行此操作,这不是真的吗?并取平均值),因为留一法是 kfold 的一种特殊情况,其中 k=观察次数?

于 2009-09-03T19:40:14.540 回答
3

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

  • 坚持
  • 引导程序
  • K 交叉验证
  • 留下一个
  • 分层交叉验证
  • 平衡分层交叉验证
  • 分层坚持
  • 分层引导带

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

于 2011-09-08T20:46:35.923 回答
1

根据cvpartitioncrossvalind的官方文档,它们看起来非常相似,但 crossvalind 看起来更灵活(它允许将 M 排除在任意 M 之外,而 cvpartition 仅允许将 1 排除在外)。

于 2009-09-03T11:45:56.330 回答
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.
于 2011-04-24T06:52:36.207 回答