首页 文章

拆分数据集以测试和训练MATLAB [重复]

提问于
浏览
1

这个问题在这里已有答案:

我想将一个非常大的数据集(超过一百万个观测值)拆分成一个测试和训练集 . 因为,您可以看到我已经设法在使用 dividerand 的代码中执行类似的操作 .

代码所做的是我们有一个非常大的集合 X ,在每次迭代时我们选择N = 1700个变量,然后我将它们以7/3的比例分割 - 训练/测试 . 但是,我想进一步做的不是使用 %'sdividerand 来使用特定值 . 例如,将数据拆分为大小为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

    怎么样:

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

相关问题