我想将一个非常大的数据集(超过一百万个观测值)拆分成一个测试和训练集。至于,您可以看到我已经设法在使用dividerand
的代码中执行类似的操作。
代码的作用是我们有一个非常大的集合X
,在每次迭代时我们选择N = 1700个变量,然后我将它们以7/3的比例 - 训练/测试进行分割。但是,我想进一步做的不是使用%'s
dividerand
来使用特定值。例如,将数据拆分为大小为2000的小批量,然后使用500进行测试,使用1500进行训练。再次,在下一个循环中,我们将选择数据(2001:4000)并将它们分成500测试和1500列车等。
同样,dividerand
允许使用比率,但我想使用实际值。
X = randn(10000,9);
mu_6 = zeros(510,613); % 390/802 - 450/695 - 510/613 - Test/Iterations
s2_6 = zeros(510,613);
nl6 = zeros(613,1);
RSME6 = zeros(613,1);
prev_batch = 0;
inf = @infGaussLik;
meanfunc = []; % empty: don't use a mean function
covfunc = @covSEiso; % Squared Exponential covariance
likfunc = @likGauss; % Gaussian likelihood
for k=1:613
new_batch = k*1700;
X_batch = X(1+prev_batch:new_batch,:);
[train,~,test] = dividerand(transpose(X_batch),0.7,0,0.3);
train = transpose(train);
test = transpose(test);
x_t = train(:,1:8); % Train batch we get 910 values
y_t = train(:,9);
x_z = test(:,1:8); % Test batch we get 390 values
y_z = test(:,9);
% Calculations for Gaussian process regression
if k==1
hyp = struct('mean', [], 'cov', [0 0], 'lik', -1);
else
hyp = hyp2;
end
hyp2 = minimize(hyp, @gp, -100, inf, meanfunc, covfunc, likfunc, x_t, y_t);
[m4 s4] = gp(hyp2, inf, meanfunc, covfunc, likfunc, x_t, y_t, x_z);
[nlZ4,dnlZ4] = gp(hyp2, inf, meanfunc, covfunc, likfunc, x_t, y_t);
RSME6(k,1) = sqrt(sum(((m4-y_z).^2))/450);
nl6(k,1) = nlZ4;
mu_6(:,k) = m4;
s2_6(:,k) = s4;
% End of calculations
prev_batch = new_batch;
disp(k);
end
答案 0 :(得分:0)
怎么样:
[~, idx] = sort([randn(2000,1)]);
group1_idx = idx(1:1500);
group2_idx = idx(1501:end);