-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathexampleMelanoma.m
145 lines (124 loc) · 6.12 KB
/
exampleMelanoma.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
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
138
139
140
141
142
143
144
145
% Loading the data
trainMelanoma = load('../../exampledata/10-fold/melanoma-5classes-abcd-100/matlab/train_melanoma-5classes-abcd-100.2');
testMelanoma = load('../../exampledata/10-fold/melanoma-5classes-abcd-100/matlab/test_melanoma-5classes-abcd-100.2');
% Examining some targets
trainMelanoma([1:5 300:305],end)
% Complete set of data
melanoma = [trainMelanoma; testMelanoma];
% Number of patterns per class
n = hist(melanoma(:,end),5)
addpath ../Algorithms
% Form structures for training/test
train.patterns = trainMelanoma(:,1:(end-1));
train.targets = trainMelanoma(:,end);
test.patterns = testMelanoma(:,1:(end-1));
test.targets = testMelanoma(:,end);
%% Use the original dataset
% Create the POM object
algorithmObj = POM();
addpath ../Measures
%% Train POM
if (exist ('OCTAVE_VERSION', 'builtin') > 0)
fprintf('POM in octave fails with non-standardized data\n---------------\n');
else
info = algorithmObj.runAlgorithm(train,test);
fprintf('Original dataset\n---------------\n');
fprintf('POM Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('POM MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
end
%% Standarize data
addpath ..
[trainStandarized,testStandarized] = DataSet.standarizeData(train,test);
% Check data
train.patterns(1:10,2:5)
trainStandarized.patterns(1:10,2:5)
% Run POM again with standarizeData
info = algorithmObj.runAlgorithm(trainStandarized,testStandarized);
fprintf('\nStandarized dataset\n---------------\n');
fprintf('POM Accuracy: %f\n', CCR.calculateMetric(info.predictedTest,test.targets));
fprintf('POM MAE: %f\n', MAE.calculateMetric(info.predictedTest,test.targets));
%% Standarize data and delete constant attributes or non numeric values
[train,test] = DataSet.deleteConstantAtributes(train,test);
[train,test] = DataSet.standarizeData(train,test);
[train,test] = DataSet.deleteNonNumericValues(train,test);
info = algorithmObj.runAlgorithm(train,test);
fprintf('\nStandarized dataset without constant attributes\n---------------\n');
fprintf('POM Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('POM MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
%% Now we apply SVR
algorithmObj = SVR();
info = algorithmObj.runAlgorithm(train,test,struct('C',10,'k',0.001,'e',0.01));
fprintf('\nSupport Vector Regression\n---------------\n');
fprintf('SVR Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('SVR MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
info.projectedTest
fprintf('\nSupport Vector Regression parameters\n---------------\n');
bestAccuracy=0;
for C=10.^(-3:1:3)
for k=10.^(-3:1:3)
for e=10.^(-3:1:3)
param = struct('C',C,'k',k,'e',e);
info = algorithmObj.runAlgorithm(train,test,param);
accuracy = CCR.calculateMetric(test.targets,info.predictedTest);
if accuracy > bestAccuracy
bestAccuracy = accuracy;
bestParam = param;
end
fprintf('SVR C %f, k %f, e %f --> Accuracy: %f, MAE: %f\n' ...
, C, k, e, accuracy, MAE.calculateMetric(test.targets,info.predictedTest));
end
end
end
fprintf('Best Results SVR C %f, k %f, e %f --> Accuracy: %f\n', bestParam.C, bestParam.k, bestParam.e, bestAccuracy);
%% For the exercise of cross validation
%algorithmObj = SVR();
%param = crossvalide(algorithmObj,train,5);
%param
%info = algorithmObj.runAlgorithm(train,test,param);
%fprintf('\nSupport Vector Regression with cross validated parameters\n---------------\n');
%fprintf('SVR Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
%fprintf('SVR MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
%% Nominal SVCs
algorithmObj = SVC1V1();
info = algorithmObj.runAlgorithm(train,test,struct('C',10,'k',0.001));
fprintf('\nSVC1V1\n---------------\n');
fprintf('SVC1V1 Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('SVC1V1 MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
info.projectedTest
algorithmObj = SVC1VA();
info = algorithmObj.runAlgorithm(train,test,struct('C',10,'k',0.001));
fprintf('\nSVC1VA\n---------------\n');
fprintf('SVC1VA Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('SVC1VA MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
info.projectedTest
%% Cost sensitive SVC
algorithmObj = CSSVC();
info = algorithmObj.runAlgorithm(train,test,struct('C',10,'k',0.001));
fprintf('\nCSSVC\n---------------\n');
fprintf('CSSVC Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('CSSVC MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
info.projectedTest
%% SVM with ordered partitions and weights
algorithmObj = SVMOP();
info = algorithmObj.runAlgorithm(train,test,struct('C',10,'k',0.001));
fprintf('\nSVMOP\n---------------\n');
fprintf('SVMOP Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('SVMOP MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
%% Extreme learning machine with ordered partitions
algorithmObj = ELMOP('activationFunction','sig');
info = algorithmObj.runAlgorithm(train,test,struct('hiddenN',20));
fprintf('\nELMOP\n---------------\n');
fprintf('ELMOP Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('ELMOP MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
%% Neural network with ordered partitions
algorithmObj = NNOP();
info = algorithmObj.runAlgorithm(train,test,struct('hiddenN',20,'iter',500,'lambda',0.1));
fprintf('\nNNOP\n---------------\n');
fprintf('NNOP Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('NNOP MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));
%% Ordinal projection based ensemble with SVORIM
algorithmObj = OPBE('base_algorithm','SVORIM');
info = algorithmObj.runAlgorithm(train,test,struct('C',10,'k',0.001));
fprintf('\nOPBE\n---------------\n');
fprintf('OPBE Accuracy: %f\n', CCR.calculateMetric(test.targets,info.predictedTest));
fprintf('OPBE MAE: %f\n', MAE.calculateMetric(test.targets,info.predictedTest));