如何有效地选择数据索引以将数据分为matlab中的训练集和验证集?

时间:2019-04-25 17:34:47

标签: r matlab

因此,在这里,我得到的数据(25000个观测值和N个特征)采用大小为25000xN的矩阵A和大小为25000x1的响应矢量B的形式。我想对此数据集执行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))=[]这样的逻辑运算来获取训练数据的索引。那么还有什么更好的方法呢?像在Matlab中使用unlist(folds[-k])在R中一样吗?

0 个答案:

没有答案