经过一些研究,我在 MATLAB 中发现了两个函数来完成这项任务:
cvpartition
统计工具箱中的函数crossvalind
生物信息学工具箱中的功能
现在,我之前使用过cvpartition
创建 n 折交叉验证子集,以及来自统计工具箱的Dataset
/类。Nominal
所以我只是想知道两者之间有什么区别以及各自的优缺点?
经过一些研究,我在 MATLAB 中发现了两个函数来完成这项任务:
cvpartition
统计工具箱中的函数crossvalind
生物信息学工具箱中的功能现在,我之前使用过cvpartition
创建 n 折交叉验证子集,以及来自统计工具箱的Dataset
/类。Nominal
所以我只是想知道两者之间有什么区别以及各自的优缺点?
根据 cvpartition 和 crossvalind 的官方文档,它们看起来非常相似,但 crossvalind 看起来稍微灵活一些(它允许为任意 M 留出 M,而 cvpartition 只允许留出 1)。
...您是否总是可以使用具有适当 k 值的 kfold 交叉验证来模拟 leave-M-out (将数据分成 k 折,测试一个,训练所有其他的,并对所有折执行此操作,这不是真的吗?并取平均值),因为留一法是 kfold 的一种特殊情况,其中 k=观察次数?
Amro,这不是您的cvpartition
vscrossvalind
问题的直接答案,但用户 Sebastian Paris 在 Mathworks 文件交换中有一个名为MulticlassGentleAdaboosting的贡献, 其中包括一组很好的函数,用于枚举用于计算训练、测试和验证集的数组索引以下抽样和交叉验证策略:
有关详细信息,请参阅包中包含的演示文件,更具体的功能sampling.m
和sampling_set.m
.
根据cvpartition和crossvalind的官方文档,它们看起来非常相似,但 crossvalind 看起来更灵活(它允许将 M 排除在任意 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.