下面是从数据集中选择一组随机排列的示例,如何使用重新创建者创建新数据集。例如下面我选择49402(大约10%)并在选择此项后创建名为UnseenTestdata
的数据集我希望其余的数据集进入名为testdata
的新数据集。
pointsToPick = 49402; %# Numbers to pick
rVec = randperm(494021); %# Random permutation of datapoint indices (N=494021 in this case)
UnseenTestdata = fulldata(rVec(1:pointsToPick),:); %# Random sample
Unseentestdata minus fulldata =数据集的其余部分恰当地命名为testdata。
fulldata集的维数是494021x6,其中我从fulldata随机选择49402x6。然后我需要从fulldata减去看不见的数据。
Barnabas Szabolcs添加了一个测试用例的答案:
fulldata = [1 2; 3 4; 5 6; 7 8];
rVec = randperm(4);
pointsToPick=2;
unseen = fulldata(rVec(1:pointsToPick),:);
testdata = fulldata(rVec(pointsToPick:length(rVec)),:);
然而这不起作用,我有屏幕转储结果:
如果您在屏幕转储中注意到看不见的数据= 3,4和7,8但是如果您在testdata中注意到7,8仍然存在。
如果是fulldata =
1,2
3,4
5,6
7,8
在这种情况下,我们选择两个随机行,看不见的行是:
row
3,4
7,8
然后剩下的应该是:
1,2
5,6
但是,如果你在示例测试的sreen转储中注意到testdata有行:
7,8
显示示例测试不起作用。
答案 0 :(得分:0)
如果我正确理解您的问题,解决方法就是
testdata = fulldata(rVec((pointsToPick+1):length(rVec)),:);
简单的测试用例:
fulldata = [1 2; 3 4; 5 6; 7 8;10 9];
rVec = randperm(4); // gives me first time [4 2 3 1 5]
pointsToPick=2;
unseen = fulldata(rVec(1:pointsToPick),:); // [7 8; 3 4]
// length(rVec) is 5
testdata = fulldata(rVec((pointsToPick+1):length(rVec)),:); // [5 6; 1 2; 10 9]
从某种意义上说,您可以清楚地看到fulldata
= unseen
(setplus)testdata
。
请注意,我们需要" + 1"因为数组是从一个向上索引而不像c ++那样,所以最后一个索引是length
而不是length-1
。
您可以使用以下方法验证事情是否正确:
isequal(sort([unseen; test]), sort(full_data)) // should be true