Как эффективно выбрать индекс данных, чтобы разделить данные на обучающие и проверочные наборы в matlab? - PullRequest
0 голосов
/ 25 апреля 2019

Итак, у меня есть данные (25000 наблюдений и N признаков) в виде матрицы A размером 25000xN и вектора ответа B размером 25000x1.Я хочу выполнить 10-кратную перекрестную проверку этого набора данных, что я сделал следующим образом:

 K_fold=10;
 matrix=zeros(K_fold,2500);
 for i=1:K_fold
     matrix(i,:)=(i:10:25000); % here get the indices in matrix  
 end
 [m,n]=size(matrix);

 for j=1:K_fold

  matrix_1=zeros(m,n);
  matrix_1(j,:)= matrix(j,:);
  i_val=matrix_1(j,:);
  i_tr_1=(matrix-matrix_1);
  i_tr=i_tr_1(:);
  i_tr((i_tr==0))=[];
  A_tr=A(i_tr,:);
  B_tr=B(i_tr,:);
  A_val=A(i_val,:);
  B_val=B(i_val,:);

  end 

Теперь я вижу то же самое с кодом R

K = 10
folds = vector(mode="list",length=K)
for (k in 1:K) {
folds[[k]] = seq(k,n,by=K)
 }
for (k in 1:K) {
 i.tr = unlist(folds[-k])
 i.val = folds[[k]]
 x.tr = x[i.tr]    
 y.tr = y[i.tr]   
 x.val = x[i.val] 
 y.val = y[i.val]
 }

Когда вы сравниваетеоба кода, которые вы увидите в коде R, unlist(folds[-k]) очень легко оставляют k-ые индексы из списка и отменяют список желаемого для обучения. То же самое я выполнил в коде matlab (как показано выше), используя дополнительную матрицу matrix_1, а затемвычитая matrix_1 из matrix и используя логическую операцию, подобную этой i_tr((i_tr==0))=[], чтобы получить индексы для обучающих данных. Так есть ли лучший способ, чем этот, как в R с использованием unlist(folds[-k]) в Matlab?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...