-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDatasetTestSVM.m
More file actions
137 lines (126 loc) · 4.34 KB
/
Copy pathDatasetTestSVM.m
File metadata and controls
137 lines (126 loc) · 4.34 KB
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
function do()
svmpath = 'lib\SVM\libsvm-master\libsvm-master\windows';
datapath= '..\dataset\';
sbdtpath= '..\dataset\subset\';
path(svmpath,path);
path(datapath,path);
path(sbdtpath,path);
%startt = 1;
%endt = 8;
%[train,trainy,test,testy]=ReadDataSet(startt,endt);
%[train,test] = loadFeature(startt,endt,trainy,testy);
load('trainfeatures.mat');
load('trainy.mat');
train = trainfeatures;
[data,label] = sample(train,trainy,2000);
% test = testfeatures;
% [data,label] = mergeData(train,trainy,test,testy);
% [mdata] = LDAFeatureComp(data,label);
% data = mdata;
[train,trainy,test,testy] = DivideData(data,label,0.2);
fprintf('data loaded!\n');
[train_scale,test_scale] = scale(train,test);
train = train_scale;
test = test_scale;
save('lda1t20_4000pertype.mat','train','trainy','test','testy');
LinearKernelSVM(train_scale,trainy,test_scale,testy);
GaussianKernelSVM(train_scale,trainy,test_scale,testy);
end
function [train_cale,test_scale] = scale(train,test)
minimums = min([train;test], [], 1);
ranges = max([train;test], [], 1) - minimums;
train_cale = (train - repmat(minimums, size(train, 1), 1)) ./ repmat(ranges, size(train, 1), 1);
test_scale = (test - repmat(minimums, size(test, 1), 1)) ./ repmat(ranges, size(test, 1), 1);
end
function [data,label] = sample(olddata,oldlabel,num_per_type)
dims = size(olddata,2);
labels = union(oldlabel,oldlabel);
num = num_per_type * length(labels);
data = zeros(num,dims);
label = zeros(num,1);
idx = 0;
for i = 1 : length(labels)
type = labels(i);
I = find(oldlabel == type);
sI = randsample(I,num_per_type);
data(idx+1:idx+num_per_type,:) = olddata(sI,:);
label(idx+1:idx+num_per_type,:) = oldlabel(sI,:);
idx = idx + num_per_type;
end
end
function [data,label] = mergeData(train,trainy,test,testy)
if size(train,2) ~= size(test,2)
return;
end
dim = size(train,2);
labels = union(trainy,testy);
data = zeros(size(train,1) + size(test,1), dim);
label = zeros(size(train,1) + size(test,1), 1);
idx = 0;
for i = 1 : length(labels)
type = labels(i);
traI = find(trainy == type);
tesI = find(testy == type);
num = length(traI) + length(tesI);
data(idx + 1 : idx + num,:) = [train(traI,:);test(tesI,:)];
label(idx + 1 : idx + num, :) = [trainy(traI,:);testy(tesI,:)];
idx = idx + num;
end
end
function [train,test] = loadFeature(startt,endt,trainy,testy)
load('trainfeatures.mat');
load('testfeatures.mat');
startp =0;
for i = 1: length(trainy)
if trainy(i) ==startt
startp = i;
break;
end
end
for endp = startp : length(trainy)
if trainy(endp) == endt + 1
endp = endp - 1;
break;
end
end
train = trainfeatures(startp:endp,:);
startp =0;
for i = 1: length(testy)
if testy(i) ==startt
startp = i;
break;
end
end
for endp = startp : length(testy)
if testy(endp) == endt + 1
endp = endp - 1;
break;
end
end
test = testfeatures(startp:endp,:);
end
function LinearKernelSVM(train,trainy,test,testy)
%linear kernel
fprintf('Linear train begin\n');
model_linear = svmtrain(trainy,train,'-t 0');
fprintf('Linear train finished\n');
save('model_linear.mat','model_linear');
fprintf('Linear train saved, begin to test\n');
[predicted_label_L, accuracy_L, prob_estimates_L] = svmpredict(testy, test, model_linear);
disp(accuracy_L);
save('accuracy_L.mat','accuracy_L');
save('predicted_label_L.mat','predicted_label_L');
fprintf('Linear test finished!\n\n');
end
function GaussianKernelSVM(train,trainy,test,testy)
%Gaussian/RBF kernel
fprintf('Gaussian/RBF kernel train begin\n');
model_gaussian = svmtrain(trainy, train,'-t 2');
fprintf('Gaussian/RBF train finished\n');
[predicted_label_G, accuracy_G, prob_estimates_G] = svmpredict(testy, test, model_gaussian);
disp(accuracy_G);
save('accuracy_G.mat','accuracy_G');
save('predicted_label_G.mat','predicted_label_G');
save('model_gaussian.mat','model_gaussian');
fprintf('Gaussian/RBF test finished!\n\n');
end