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

问题描述

我正在训练神经网络进行分类。但是,我只有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 -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将索引随机化。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...