我正在训练神经网络进行分类。但是,我只有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
答案 0 :(得分:1)
Coss验证仅意味着具有两个集合,一个在训练中,另一个在随后的迭代中进行测试。因此cvpartition
不会将您分成三组。您现在可以说验证集仅是测试集的一个子集,因此您在此上再次使用cvpartition
,确保您不会意外地对整个测试集进行测试(这不适用于corss -validation)或,如果您想应用交叉验证,请采用另一种方法:
% 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
将索引随机化。