通过一些研究,我在MATLAB中找到了两个函数来完成任务:
cvpartition
统计工具箱中的函数crossvalind
生物信息学工具箱中的函数
现在我之前使用过cvpartition
来创建n折交叉验证子集,还使用了统计工具箱中的Dataset
/Nominal
类。所以我想知道这两者之间有什么区别,以及各自的优缺点是什么?
通过一些研究,我在MATLAB中找到了两个函数来完成任务:
cvpartition
统计工具箱中的函数crossvalind
生物信息学工具箱中的函数现在我之前使用过cvpartition
来创建n折交叉验证子集,还使用了统计工具箱中的Dataset
/Nominal
类。所以我想知道这两者之间有什么区别,以及各自的优缺点是什么?
根据cvpartition和crossvalind的官方文档,它们看起来非常相似,但crossvalind似乎更加灵活(它允许对任意M进行留出M个数据的操作,而cvpartition只允许留出一个数据)。
...难道不是真的吗?你总是可以使用适当的k值(将数据分为k折,在其中一折上测试,在其他所有折上进行训练,并在所有折中重复此过程并取平均值),通过kfold交叉验证模拟留下M个数据,因为留下一个数据是kfold的一种特殊情况,其中k=观测数量吗?
cvpartition
和 crossvalind
的问题,但是在Mathworks文件交换中心中有一个贡献者Sebastian Paris上传了一个名为MulticlassGentleAdaboosting的项目包,其中包括一组很好的函数用于枚举数组索引以计算以下抽样和交叉验证策略的训练、测试和验证集:
有关详细信息,请参见包中包含的演示文件,尤其是函数sampling.m
和sampling_set.m
。
根据cvpartition和crossvalind的官方文档,它们看起来非常相似,但是crossvalind似乎更加灵活(它允许任意M个样本离开,而cvpartition只允许一个样本离开)。
我知道你的问题并不直接涉及神经网络工具箱,但也许其他人会发现这很有用。要将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.