拆分数据集以测试和训练MATLAB

时间:2017-08-13 05:55:38

标签: matlab split training-data test-data

我想将一个非常大的数据集(超过一百万个观测值)拆分成一个测试和训练集。至于,您可以看到我已经设法在使用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

1 个答案:

答案 0 :(得分:0)

怎么样:

[~, idx] = sort([randn(2000,1)]);
group1_idx = idx(1:1500);
group2_idx = idx(1501:end);