如何获取数据集的其余部分

时间:2012-11-17 11:34:55

标签: matlab

下面是从数据集中选择一组随机排列的示例,如何使用重新创建者创建新数据集。例如下面我选择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)),:); 

然而这不起作用,我有屏幕转储结果:

enter image description here

如果您在屏幕转储中注意到看不见的数据= 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

显示示例测试不起作用。

1 个答案:

答案 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