我正在训练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
随机化索引。