-
Notifications
You must be signed in to change notification settings - Fork 0
/
Learning_Vector_Quantization.m
203 lines (181 loc) · 4.44 KB
/
Learning_Vector_Quantization.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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
clc;
close all;
clear;
%% PEMBENTUKAN DATA LATIH
data = xlsread('iris.xlsx', 'Training');
data_train = data(1:105,:);
%data latih
input_train = data_train(:,2:5)';
target_train = data_train(:,1)';
target_train_vector = ind2vec(target_train);
%% Membuat Jaringan LVQ
% Melakukan Pembacaan Target
for i=1:105
for j=1:4
x(i,j)=data_train(i,j+1);
end
end
x;
input_neuron = 4; % Jumlah Neuron Input
output_neuron = 3; % Jumlah Neuron Output
data_per_class = 35; % Jumlah Data tiap Kelas
alpha = 0.000001; % Laju Pembelajaran (Learning Rate)
eps = 0.00001; % Batas Perubahan Bobot
% Inisialisasi Bobot
for j = 1:3
v(j,:) = x((((j - 1)*data_per_class)+1),:);
end
v;
% Pembelajaran LVQ
epoch = 500;
for it = 1:epoch
k = 1;
v_old = v;
for loop = 1:105
X = x(k, :);
T = target_train(k);
min = inf;
for j = 1:3
d(j) = 0;
for i = 1:4
d(j) = d(j) + ((X(1,i)-v(j,i))^2); % Menghitung Jarak antara Vji dengan Xi
end
d(j) = d(j)^0.5;
if(d(j)<min)
min = d(j);
J = j;
end
end
% Melakukan Perhitungan Nilai Pengubah Vektor Pewakil / Bobot
delta_v = alpha*(X-v(J,:));
% Melakukan Pengecekan Info Kelas dan Update Bobot
if(J == T)
vn = v(J,:)+delta_v;
else
vn = v(J,:)-delta_v;
end
v(J,:)=vn;
k = k + data_per_class;
if(k > 105)
k = k-105+1;
end
end
% Pengujian Kondisi Penghentian (Selisih Vji saat ini dengan Vji
% sebelumnya)
for j = 1:3
for i = 1:4
dv(j,i)=abs(v(j,i)-v_old(j,i));
end
end
% Pengecekan Apakah Terdapat Data Selisih yang Melebihi Batas Perubahan
cek_dv = 0;
for i=1:4
for j=1:3
if(dv(j,i)>eps)
cek_dv=cek_dv+1;
end
end
end
% Apabila Tidak terdapat Perubahan Maka Menghentikan Looping Iterasi
if(cek_dv==0)
break
end
% Melakukan Modifikasi Laju Pembelajaran
alpha = alpha*0.5
end
it;
v;
%% PEMBENTUKAN DATA TESTING
data = xlsread('iris.xlsx', 'Testing');
data_test = data(1:45,:);
%data uji
input_test = data_test(:,2:5)';
target_test = data_test(:,1)';
%% Pengujian LVQ Terhadap Data Acak Pertama
% Melakukan Pembacaan Target
for i=1:45
for j=1:4
a(i,j)=data_test(i,j+1);
end
end
correct = 0; % Counter Perhitungan Data yang Teridentifikasi Benar
nTest = 45;
in = 1;
false = [];
k = 1;
% Testing Process
for loop = 1:45
X = a(k, :);
T = target_test(k);
min = inf;
for j=1:3
d(j) = 0;
for i = 1:4
d(j) = d(j) + ((v(j,i)-X(1,i))^2);
end
d(j) = d(j)^0.5;
% Melakukan Pemeriksaan Bobot yang Memiliki Jarak yang Paling Dekat
% dengan Xi
if(d(j)<min)
min = d(j);
J=j;
end
end
% Melakukan Pengecekan Kesesuaian Classification
if (J==T)
correct = correct+1;
else
false(in,:)=[k J T];
in = in+1;
end
k = k+15;
if(k>45)
k = k-45+1;
end
end
fprintf("Pengujian Model LVQ Terhadap Dataset Pertama\n");
epoch_terakhir = it
sum_train = nTest
sum_correct = correct
recognition_rate = (sum_correct/nTest)*100
false
%% Pengujian LVQ Terhadap Data Acak Kedua
correct = 0; % Counter Perhitungan Data yang Teridentifikasi Benar
in = 1;
false = [];
k = 1;
% Testing Process
for loop = 1:105
X = x(k, :);
T = target_train(k);
min = inf;
for j=1:3
d(j) = 0;
for i = 1:4
d(j) = d(j) + ((v(j,i)-X(1,i))^2);
end
d(j) = d(j)^0.5;
% Melakukan Pemeriksaan Bobot yang Memiliki Jarak yang Paling Dekat
% dengan Xi
if(d(j)<min)
min = d(j);
J=j;
end
end
% Melakukan Pengecekan Kesesuaian Classification
if (J==T)
correct = correct+1;
else
false(in,:)=[k J T];
in = in+1;
end
k = k+data_per_class;
if(k>105)
k = k-105+1;
end
end
fprintf("Pengujian Model LVQ Terhadap Dataset Kedua\n");
epoch_terakhir = it
sum_correct = correct
recognition_rate = (sum_correct/105)*100
false