在 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,这不是您的 cvpartitioncrossvalind 问题的直接答案,但是用户 Sebastian Paris 在 Mathworks 文件交换中有一个名为 MulticlassGentleAdaboosting 的贡献,其中包括一组用于枚举数组的不错的函数用于计算以下采样和交叉验证策略的训练、测试和验证集的索引:

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

有关详细信息,请参阅包中包含的演示文件,更具体地说是函数sampling.msampling_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 中将数据拆分为训练/测试数据集?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TensorFlow 中使用我自己的数据将图像拆分为测试和训练集

将主数据目录拆分为训练/验证/测试集

拆分训练测试数据集将相似的值保持在一起

如何将训练数据集拆分为训练,验证和测试数据集?

如何将数据集 (csv) 拆分为训练和测试数据

如何在不使用和拆分测试集的情况下将我的数据集拆分为训练和验证?