Matlab的:将数据块随机分成相等大小的集(Matlab: Dividing chunks of

2019-09-28 00:48发布

我有一个大的数据集,我需要随机分成5个几乎相同大小的集交叉验证。 我愉快地使用_crossvalind_之前分成组,但这个时候,我需要在一个时间数据块划分为这些群体。

比方说,我的数据是这样的:

data = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18];

然后我想他们随机分成5组中的2块,例如像这样

g1 = [3 4], [11 12]  
g2 = [9 10]  
g3 = [1 2], [15 16]  
g4 = [7 8], [17 18]  
g5 = [5 6], [13 14]

我想我可以与一些for循环做到这一点,但我猜必须有一个更具成本效益的方式做到这一点在MATLAB :-)

有什么建议么?

Answer 1:

我解释你的需要是集随机排序,但在每个组中,元素的顺序是从父组保持不变。 可以使用randperm到随机排序的集合的数目,并使用线性索引的元素。

dataElements=numel(data);%# get number of elements
totalGroups=5;
groupSize=dataElements/totalGroups;%# I'm assuming here that it's neatly divisible as in your example
randOrder=randperm(totalGroups);%# randomly order of numbers from 1 till totalGroups
g=reshape(data,groupSize,totalGroups)';             %'# SO formatting
g=g(randOrder,:);

的不同行g给你不同的分组。



Answer 2:

可以随机播放阵列(randperm),然后将其分成consequentive相等的部分。

data = [10 20 30 40 50 60 70 80 90 100 110 120 130 140 150];
permuted = data(randperm(length(data)));
% padding may be required if the length of data is not divisible by the size of chunks
k = 5;
g = reshape(permuted, k, length(data)/k);


文章来源: Matlab: Dividing chunks of data randomly into equal sized sets