【问题标题】:How to divide dataset into test, validation and training using specific indices?如何使用特定指标将数据集划分为测试、验证和训练?
【发布时间】:2018-04-13 18:44:06
【问题描述】:

我有一个大约 189000 行的大型数据集,总共 16 列。我想将其分为 80% 的训练和 20% 的测试。数据集中的行本身被分成几组,第一部分与新闻相关,第二部分与体育相关,第三部分与宗教相关,最后一部分是一般的。我不能直接将其拆分为 80:20,因为位于数据集下部的大多数类将在训练中丢失。另外,如何从此类数据集中选择验证集?

【问题讨论】:

  • 最好的做法是随机拆分并尝试几个不同的拆分,以确保没有过度拟合。如果您有神经网络工具箱,您可以使用dividerand 执行此操作,否则只需使用randperm
  • 如果您有机器学习工具箱,请参阅cvpartition 并带有“保留”选项:ch.mathworks.com/help/stats/cvpartition.html

标签: matlab training-data


【解决方案1】:

如果我很好地理解了您的问题,那么在选择您的训练数据集时,您希望保留不同行类型的比例。我建议您为每种行类型选择 80% 的行。

% rowType: 1: news, 2: sport, 3: religion, 4: general
% dataset: original dataset variable
trainingSelected = false(size(dataset,1),1);
p = 0.8;
for i=1:4
    rTypeIdx = find(rowType==i);
    n = numel(rTypeIdx)

    sel = randperm(n, round(n*p));
    trainingSelected(rTypeIdx(sel)) = true;
end

如果你不想严格保持比例,你可以直接使用randperm:

p = 0.8
trainingSelected = randperm(size(dataset,1), round(size(dataset,1)*p));

【讨论】:

    猜你喜欢
    • 2019-10-15
    • 2019-05-01
    • 2017-09-30
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2016-07-28
    • 2016-07-04
    相关资源
    最近更新 更多