/
prepareData.m
96 lines (84 loc) · 3.35 KB
/
prepareData.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
%% prepareData.m
% Prepare training data
numOfAllSamples=size(inputLabel ,1);
numOfTest = numOfSamples-numOfTrain;
% locate matrix for train and test data
trainData_0 = zeros(numOfClasses*numOfTrain, row*col);
testData = zeros(numOfAllSamples-numOfClasses*numOfTrain,row*col);
clear trainLabel_0;
clear testLabel_0;
clear testLabel;
% record the number of samples belonging to each class
% in case of different samples in each class
eachClass=zeros(numOfClasses,1);
for ii=1:numOfClasses
for jj=1:numOfAllSamples
if(inputLabel(jj)==ii)
eachClass(ii)=eachClass(ii)+1;
end
end %jj
end %ii
numOfSamples = min(eachClass);
idx1st=0; % index of 1st (training) sample of each class
idx1stTest=0; % index of 1st test sample of each class
% select training samples randomly
for jClass=1:numOfClasses
% Random permutation the last n samples of each class
%if numOfTrain>mFirstSamples % add random
% randIdx=randperm(eachClass(jClass)-mFirstSamples)+mFirstSamples;
% trainIndices_0 = [1:mFirstSamples,randIdx(1:numOfTrain-mFirstSamples)]; % relative indies
% testIndices_0 = [randIdx(numOfTrain-mFirstSamples+1:eachClass(jClass)-mFirstSamples)];
%else % do not add random
trainIndices_0 = [1:numOfTrain]; % no random
testIndices_0 = [numOfTrain+1:eachClass(jClass)]; % no random
%end
trainIndices=idx1st+trainIndices_0; % abosulte indies to all samples
testIndices=idx1st+testIndices_0; % abosulte indies to all samples
temp1=inputData(:,trainIndices)';
temp2=inputData(:,testIndices)';
% original training data, may be changed later
trainData_0(((jClass-1)*numOfTrain+1):((jClass-1)*numOfTrain+numOfTrain),:)=temp1;
trainLabel_0(((jClass-1)*numOfTrain+1):((jClass-1)*numOfTrain+numOfTrain),1)=jClass;
numOfRestSamples=eachClass(jClass,1)-numOfTrain; %
% original test data, not changed
testData(idx1stTest+1:idx1stTest+numOfRestSamples,:)=temp2;
testLabel(idx1stTest+1:idx1stTest+numOfRestSamples,1)=jClass;
idx1stTest=idx1stTest+(eachClass(jClass,1)-numOfTrain);
idx1st=idx1st+eachClass(jClass);
end % j
%--------------------------------------------------
numOfAllTrain = size(trainData_0,1); % total traning samples
maxSizeOfDict = numOfAllTrain; % this usually the best size
% for iTran=1:numOfAllTrain
% % resulted training data
% trainData(2*iTran-1,:)=trainData_0(iTran,:);
% tempory=trainData_0(iTran,:);
% tempory1=reshape(tempory,row,col);
% for iCol=1:col % revert the image
% tempory2(:,col-iCol+1)=tempory1(:,iCol);
% end
% tempory3=reshape(tempory2,row*col,1);
% trainData(2*iTran,:)=tempory3(:);
% end
%
% for iTran=1:numOfAllTrain
% trainLabel(2*iTran-1)=trainLabel_0(iTran);
% trainLabel(2*iTran)=trainLabel_0(iTran);
% end
% prepare for representation
for kk=1:size(trainData_0,1)
Ai = double(trainData_0(kk,:));
trainData_0(kk,:)=Ai/norm(Ai);
end
% for kk=1:size(trainData,1)
% trainData(kk,:)=trainData(kk,:)/norm(trainData(kk,:));
% end
trainData = trainData_0;
trainLabel = trainLabel_0;
trainIndices = trainIndices_0;
%--------------------------------------------------------------------------
for kkk=1:size(testData,1)
Xi = double(testData(kkk,:));
testData(kkk,:)=Xi/norm(Xi);
end
numOfClasses; %