如何使用cvpartion将数据集拆分为训练/验证/测试



我正在训练NN进行分类。然而,我只有525个样本和大约300个预测变量。我知道我可以尝试减少变量的数量,寻找真正更重要的变量,但这不是重点。

目前,我将数据分为训练/验证/测试,在网络训练期间使用验证进行早期停止。

我想在Matlab中使用cvpartition函数的交叉验证,但该函数在训练/测试中划分数据集。是否有任何方法可以使用cvpartition将其拆分为培训/验证/测试?

c=cvpartition(t_class,'KFold',10,'Stratify', true)
K-fold cross validation partition
NumObservations: 525
NumTestSets: 10
TrainSize: 473  472  472  472  472  472  473  473  473  473
TestSize: 52  53  53  53  53  53  52  52  52  52

Coss验证只意味着有两个集,一个在上进行训练,另一个在下一次迭代中进行测试。所以cvpartition不会把你分成三组。您现在可以争辩说,验证集只是测试集的一个子集,因此您在此再次使用cvpartition,确保您不会意外地在整个测试集上进行测试(这对corss验证不起作用(如果您想应用交叉验证,请使用另一种方法:

% 20% for validation
cvp = cvpartition(t_class,'HoldOut',0.2);
% extract the data set
t_class_Val = t_class(cvp.test);
% Dat_Val     = Dat(cvp.test,:);
t_class_TrnTst  = t_class(cvp.training);
% Dat_TrnTst      = Dat(cvp.training,:);
% cross-validation for the rest
cvp2 = cvpartition(t_class_TrnTst,'KFold',10,'Stratify', true);

另一种选择是自己编写代码。您可以使用randperm随机化索引。

相关内容

  • 没有找到相关文章

最新更新