在 MATLAB 中将数据拆分为训练/测试数据集?
Posted
技术标签:
【中文标题】在 MATLAB 中将数据拆分为训练/测试数据集?【英文标题】:Splitting data into training/testing datasets in MATLAB? 【发布时间】:2010-11-25 04:51:40 【问题描述】:经过一些研究,我发现 MATLAB 中有两个函数可以完成这项任务:
cvpartition
统计工具箱中的函数
crossvalind
生物信息学工具箱中的函数
现在我之前使用 cvpartition
创建了 n 重交叉验证子集,以及来自统计工具箱的 Dataset
/Nominal
类。所以我只是想知道两者之间有什么区别以及各自的优缺点?
【问题讨论】:
【参考方案1】:扩展至@Mr Fooz's answer
根据 cvpartition 和 crossvalind 的官方文档,它们看起来非常相似,但 crossvalind 看起来更灵活(它允许将 M 排除在任意 M 之外,而 cvpartition 仅允许将 1 排除在外)。
...您是否总是可以使用具有适当 k 值的 kfold 交叉验证来模拟 leave-M-out(将数据分成 k 折,测试一个,训练所有其他的,然后执行此操作对于所有折叠并取平均值),因为留一法是 kfold 的一种特殊情况,其中 k=观察次数?
【讨论】:
【参考方案2】:Amro,这不是您的 cvpartition
与 crossvalind
问题的直接答案,但是用户 Sebastian Paris 在 Mathworks 文件交换中有一个名为 MulticlassGentleAdaboosting 的贡献,其中包括一组用于枚举数组的不错的函数用于计算以下采样和交叉验证策略的训练、测试和验证集的索引:
有关详细信息,请参阅包中包含的演示文件,更具体地说是函数sampling.m
和sampling_set.m
。
【讨论】:
【参考方案3】:根据cvpartition 和crossvalind 的官方文档,它们看起来非常相似,但 crossvalind 看起来更灵活(它允许将 M 排除在任意 M 之外,而 cvpartition 仅允许将 1 排除在外)。
【讨论】:
【参考方案4】:我知道您的问题并非直接涉及神经网络工具箱,但也许其他人可能会觉得这很有用。要将您的 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.
【讨论】:
以上是关于在 MATLAB 中将数据拆分为训练/测试数据集?的主要内容,如果未能解决你的问题,请参考以下文章