我正在研究神经网络训练数据,并将250名患者的载体均匀分配到10个不同的组,名为Icross
。这意味着25名患者被分配到第1组,25名患者被分配到第2组,等等。Icross
是250x1的载体。
我想创建一个for循环,将患者分别分为测试和训练组Itest
和Itrain
向量。这意味着分配到1-5组的患者在Itest
,6-10在Itrain
。
对于我的输出,理想情况下,两个向量中将有250行数据作为输出,由1和0组成,表示它是否已分配到组中,具体取决于我查看的生成的向量。但是,使用for循环我创建的只是为每个向量分配一个值5。有关如何修改循环的任何建议吗?
for Icross = 1:5;
Itest = Icross;
Itrain = ~Itest;
end
理想输出:
Name Value
Itest = 250x1 logical
Itrain= 250x1 logical
我创建的for循环输出:
Name Value
Icross 5 (1x1double)
Itest 5 (1x1double)
Itrain 0 (1x1logical)
答案 0 :(得分:1)
问题是你的循环在每次迭代中为同一个变量分配一个新值。只是一个数字示例,因为我不知道您的基础数据是什么样的:
% A single vector containing all the patients...
patients = (1:250).';
% A 25-by-10 matrix representing the patients categorized into groups...
patients_grouped = reshape(patients,25,10);
% Two matrices, one for the training and one for the test:
test = reshape(patients_grouped(:,1:5),125,1);
train = reshape(patients_grouped(:,6:end),125,1);
如果你想将250名患者随机分成10组,事情会变得更加复杂。为此,以下代码应该可以解决问题:
% A single vector containing all the patients...
patients = (1:250).';
% Define the number of groups...
g = 10;
% Split the patients...
[n,m] = size(patients);
count = numel(patients) / g;
[~,idx] = sort(rand(n,1));
C = patients(idx,:);
patients_grouped = NaN(count,g);
for k = 1:g
idx_k = ((k - 1) * count) + 1:(k * count);
patients_grouped(:,k) = C(idx_k,:);
end
一旦您的患者被随机分组到10
类别,获取您的逻辑数组,定义他们是属于测试组还是培训组,可以这样做:
patients_1to5 = patients_grouped(:,1:5);
patients_test = ismember(patients,patients_1to5(:));
patients_train = ~patients_test;
答案 1 :(得分:0)
如果Icross
是一个值为1-10的向量,将患者分配到10组,那么
Itest = Icross <= 5;
对于1-5组中的所有患者,均为真(1),
Itrain = ~Itest;
适用于其他组的所有患者(6-10)。