function [ trnData,trnLab,trnNum,tstData,tstLab,tstNum ] = TrainTest( data,lab,trnPer,clsCnt ) clsNum = zeros(1, clsCnt); %每个类别的(数据的)总数量 trnNum = zeros(1, clsCnt); %每个类别的数据选作训练数据的数量 tstNum = zeros(1, clsCnt); %每个类别的数据选作测试数据的数量 for i = 1 : clsCnt index = find(lab == i); %找到标记为i的数据的下标 clsNum(i) = size(index,1); %标记为i的数据的总数量 trnNum(i) = ceil(clsNum(i) * trnPer); %选取作为训练样本的数量 tstNum(i) = clsNum(i) - trnNum(i); %剩余的为测试样本的数量 end %开始计算 trnData = []; %保存训练数据 trnLab = zeros(clsCnt,sum(trnNum)); %保存训练数据对应的类型 tstData = []; %保存测试数据 tstLab = zeros(clsCnt,sum(tstNum)); %保存测试数据对应的类型 temp1 = 1; temp2 = 1; %每种类别随机选取20%作为样本数据 for i = 1 : clsCnt index = find(lab == i); %找到标记为i的数据的下标 random_index = index(randperm(length(index))); %结果为打乱顺序后的下标序列 index = random_index(1:trnNum(i)); %在乱序中取前20%作为训练样本,index保存它们的下标 trnData = [trnData data(index,:)']; %将训练样本的数据依次填充进trnFet数组 trnLab(i,temp1:temp1 + trnNum(i)-1 ) = 1; %将训练样本的标记依次填充进trnLab数组 temp1 = temp1 + trnNum(i); index = random_index(trnNum(i)+1:end); %乱序中剩余的为测试样本,index保存它们的下标 tstData = [tstData data(index,:)']; %将测试样本的数据依次填充进tstFet数组 tstLab(i,temp2:temp2 + tstNum(i)-1 ) = 1; temp2 = temp2 + tstNum(i); %将测试样本的标记依次填充进tstFet数组 end
时间: 2024-04-01 22:31:31 浏览: 120
这段代码是用于将数据集分成训练集和测试集的,首先根据类别数量,计算每个类别的数据总数、选作训练数据的数量和选作测试数据的数量。然后,对于每个类别,随机选取20%的数据作为训练样本,剩余的数据作为测试样本。最后,将训练数据和测试数据分别存储在 trnData、tstData 数组中,标记也存储在 trnLab、tstLab 数组中。其中,trnLab、tstLab 数组是一个二维数组,第一维表示类别,第二维表示样本。如果一个样本属于某个类别,那么对应位置的值为1,否则为0。
阅读全文