2017-08-13 12 views
1

私は(100万以上の観測値を持つ)非常に大きなデータセットをテストとトレインセットに分割したいと考えています。として、私は既にdividerandの使用でコードのベローズで同様の何かを実行するために管理していることがわかります。MATLABのテストとトレーニングのための分割データセット

私たちは非常に大きなセットXを持っています。すべての反復でN = 1700の変数を選択し、それを7/3 - train/testの比率で分割します。しかし、私がさらにやりたいことは、%'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 

答えて

0

方法について:

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