-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathTask_1_model3.m
More file actions
127 lines (102 loc) · 3.13 KB
/
Task_1_model3.m
File metadata and controls
127 lines (102 loc) · 3.13 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
format compact
clear
clc
%% Load data
data=load('../Datasets/haberman.data');
class2=data(find(data(:,4)==2),:);
class1=data(find(data(:,4)==1),:);
class1=class1(1:length(class2),:);
data=[class1',class2'];
data=data';
%% init arrays
Acc=zeros(2,1);
numOfRules=zeros(2,1);
Perf=zeros(1,6);
%% split the data to 60 training,20 val and 20 test.
preproc=1;
[trnData,chkData,tstData]=split_scale(data,preproc);
%% ANFIS - Scatter Partition
%%Clustering Per Class
radius=0.7;
[c1,sig1]=subclust(trnData(trnData(:,end)==1,:),radius);
[c2,sig2]=subclust(trnData(trnData(:,end)==2,:),radius);
num_rules=size(c1,1)+size(c2,1);
%Build FIS From Scratch
fis=newfis('FIS_SC','sugeno');
%Add Input-Output Variables
names_in={'in1','in2','in3','in4','in5'};
for i=1:size(trnData,2)-1
fis=addvar(fis,'input',names_in{i},[0 1]);
end
fis=addvar(fis,'output','out1',[0 1]);
%Add Input Membership Functions
name='sth';
for i=1:size(trnData,2)-1
for j=1:size(c1,1)
fis=addmf(fis,names_in{i},'gaussmf',[sig1(j) c1(j,i)]);
end
for j=1:size(c2,1)
fis=addmf(fis,names_in{i},'gaussmf',[sig2(j) c2(j,i)]);
end
end
%Add Output Membership Functions
params=[zeros(1,size(c1,1)) ones(1,size(c2,1))];
%params=[ones(1,size(c1,1)) 2*ones(1,size(c2,1))];
for i=1:num_rules
fis=addmf(fis,'out1','constant',params(i));
end
%Add FIS Rule Base
ruleList=zeros(num_rules,size(trnData,2));
for i=1:size(ruleList,1)
ruleList(i,:)=i;
end
ruleList=[ruleList ones(num_rules,2)];
fis=addrule(fis,ruleList);
fis=genfis2(trnData(:,1:end-1),trnData(:,end),radius);
%get the num of rules
numOfRules(i)=length(fis.Rules());
[trnFis,trnError,~,valFis,valError]=anfis(trnData,fis,[100 0 0.01 0.9 1.1],[],chkData);
%evaluation of model
Y=evalfis(tstData(:,1:end-1),valFis);
Y=round(Y);
diff=tstData(:,end)-Y;
Acc=(length(diff)-nnz(diff))/length(Y)*100;
%% Error Matrix
error_matrix = confusionmat(tstData(:,end), Y);
pa = zeros(1, 2);
ua = zeros(1, 2);
%% confusion matrix
figure;
cm = confusionchart(tstData(:,end),Y);
%% Producer’s accuracy – User’s accuracy
N = length(tstData);
for i = 1 : 2
pa(i) = error_matrix(i, i) / sum(error_matrix(:, i));
ua(i) = error_matrix(i, i) / sum(error_matrix(i, :));
end
%% Overall accuracy
overall_acc = 0;
for i = 1 : 2
overall_acc = overall_acc + error_matrix(i, i);
end
overall_acc = overall_acc / N;
%% k
p1 = sum(error_matrix(1, :)) * sum(error_matrix(:, 1)) / N ^ 2;
p2 = sum(error_matrix(2, :)) * sum(error_matrix(:, 2)) / N ^ 2;
pe = p1 + p2;
k = (overall_acc - pe) / (1 - pe);
%% Plot some input membership functions
figure;
plotMFs(fis,size(trnData,2)-1);
suptitle('TSK model : some membership functions before training');
%% Plot the input membership functions after training
figure;
plotMFs(valFis,size(trnData,2)-1);
suptitle('TSK model : some membership functions after training');
%% Learning curve
figure;
plot(1:length(trnError), trnError, 1:length(valError), valError);
title('TSK model : Learning Curve');
xlabel('iterations');
ylabel('Error');
legend('Training Set', 'Check Set');