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