如何使用特定指数将数据集划分为测试,验证和培训?

时间:2017-11-01 12:36:31

标签: matlab training-data

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

1 个答案:

答案 0 :(得分:2)

如果我理解您的问题,在选择训练数据集时,您希望保留不同行类型的比例。我建议你为每一行选择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));