【问题标题】:How to split the dataset into train/ validation / test with cvpartion?如何使用 cvpartion 将数据集拆分为训练/验证/测试?
【发布时间】:2020-12-01 15:05:59
【问题描述】:

我正在训练 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

【问题讨论】:

    标签: matlab neural-network cross-validation


    【解决方案1】:

    Coss-validation 仅意味着有两个集合,一个用于训练,另一个用于测试并在下一次迭代中再次进行。所以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 随机化索引。

    【讨论】:

      猜你喜欢
      • 2019-05-01
      • 2021-01-19
      • 2013-09-27
      • 2016-07-04
      • 2021-04-19
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2018-01-28
      相关资源
      最近更新 更多