Jumat, 11 Agustus 2017

LVQ melakukan pembelajaran pada lapisan kompetitif yang terawasi. 
Lapisan kompetitif akan secara otomatis belajar untuk mengklasifikasikan vector-vector input. 

Kelas-kelas yang didapat sebagai hasil dari lapisan kompetitif ini hanya tergantung pada jarak antara vector-vector input. Jika vector input mendekati sama maka lapisan kompetitif akan mengklasifikasikan kedua vector input tersebut kedalam kelas yang sama.


LVQ (Learning Vector Quantization) juga merupakan metode dalam Jaringan Syaraf Tiruan untuk melakukan pembelajaran terhadap layer yang supervised. 

Metode klasifikasi pola dengan setiap unit-keluaran mewakili satu kelas tertentu atau satu kategori tertentu. Digunakan vektor acuan (Vector Reference/Codebook). Vektor bobot dari satu unit keluaran yang menjadi acuan bagi kelas/kategori yang diwakili oleh keluaran tersebut. Pendekatan yang dilakukan adalah dengan mengelompokkan vektor input berdasarkan kedekatan jarak vector input terhadap bobot (metode kuadrat jarak Euclidean minimum).

Arsitektur di atas merupakan contoh struktur jaringan LVQ yang memiliki 4 input layer dengan 2 unit neuron pada output layer. W1 dan W2 merupakan bobot yang menghubungkan input layer ke output layer. Setiap fungsi aktivasi F melakukan pemetaan setiap y_In ke klasifikasi y1 atau y2. 

Pada F1, jika |x-w1|<|x-w2| maka y_In1 dipetakan ke y1=1 dan dipetakan ke y1=0 jika sebaliknya. Kondisi ini berlaku juga pada F2, dengan kondisi yang sesuai.



Metode LVQ (Learning Vector Quantization) Untuk Pengenalan Pola

Posted in Umum  February 18, 2016  hwsmartsolution  2
LVQ (Learning Vector Quantization) merupakan metode dalam Jaringan Syaraf Tiruan untuk melakukan pembelajaran terhadap layer yang supervised. Metode klasifikasi pola dengan setiap unit-keluaran mewakili satu kelas tertentu atau satu kategori tertentu. Digunakan vektor acuan (Vector Reference/Codebook). Vektor bobot dari satu unit keluaran yang menjadi acuan bagi kelas/kategori yang diwakili oleh keluaran tersebut. Pendekatan yang dilakukan adalah dengan mengelompokkan vektor input berdasarkan kedekatan jarak vector input terhadap bobot (metode kuadrat jarak Euclidean minimum).

Arsitektur LVQ :

Arsitektur LVQ

Arsitektur di atas merupakan contoh struktur jaringan LVQ yang memiliki 4 input layer dengan 2 unit neuron pada output layer. W1 dan W2 merupakan bobot yang menghubungkan input layer ke output layer. Setiap fungsi aktivasi F melakukan pemetaan setiap y_In ke klasifikasi y1 atau y2. Pada F1, jika |x-w1|<|x-w2| maka y_In1 dipetakan ke y1=1 dan dipetakan ke y1=0 jika sebaliknya. Kondisi ini berlaku juga pada F2, dengan kondisi yang sesuai.

Algoritma :

Langkah 0: Inisialisasi /Inisialisai Vektor-Vektor Acuan dan Inisialisai Laju Pembelajaran alfa=0
Langkah 1: Jika kondisi stop salah, lakukan langkah 2-6
Langkah 2: Untuk setiap training vector, lakukan langkah 3-4
Langkah 3: Dapatkan nilai j sehingga ||x-wj|| bernilai minimum
Langkah 4: Update nilai bobot wj

Jika T = Cj
Wj(baru) = wj(lama) + α(x-wj(lama))

Jika T ≠ Cj
Wj(baru) = wj(lama) – α(x-wj(lama))

Langkah 5: Update nilai learning rate

Langkah 6: Uji kondisi stop
      Uji kondisi stop ini dapat dilakukan berdasarkan jumlah iterasi tertentu (mulai dari langkah 1) atau setelah laju pembelajaran yang telah mencapai harga yang sangat kecil.

Dimana:
      X = training vector (x1 ,….,xi,… ,xn)

      T = kategori training vector yang benar untuk pelatihan

      Wj = vector bobot untuk unit keluaran ke-j (w1j,….,wij,…..,win)

      Cj = kategori  atau kelas yang diwakili oleh nilai unit keluaran  ke-j(hasil training)


      ||x-wj|| = Euclidian  distances antara vektor masukkan dan vektor bobot dari unit keluaran ke-j.

Reff Doc

++++++++++++++++
Pengujian Dasar + Pembuktian (Kasus 2 Row / Ya atau Tidak / 1 atau 0)

P = [-3 -2 -2  0  0  0  0 +2 +2 +3; 0 +1 -1 +2 +1 -1 -2 +1 -1  0];
Tc = [1 1 1 2 2 2 2 1 1 1];
T = ind2vec(Tc);
net = newlvq(P,4,[.6 .4]);
net = train(net,P,T);
Y = sim(net,P)
Yc = vec2ind(Y)
E = Tc-Yc

MSE = mse(E)

Y =

     1     1     1     0     0     0     0     1     1     1
     0     0     0     1     1     1     1     0     0     0


Yc =

     1     1     1     2     2     2     2     1     1     1


E =

     0     0     0     0     0     0     0     0     0     0


MSE =


     0

Implementasi Multi Row(Lebih dari 2 Output)



load datalatih
load datatarget     
datatraining=datalatih';

T=[1 1 1 2 2 2];
A=[1:3];
B=[4:6];
C=[7:9];
D=[10:12];
E=[13:15];
F=[16:18];
G=[19:21];
H=[22:24];
I=[25:27];
J=[28:30];

netAB=getNet(datatraining,A,B,T);save netAB.mat netAB;
netAC=getNet(datatraining,A,C,T);save netAC.mat netAC;
netAD=getNet(datatraining,A,D,T);save netAD.mat netAD;
netAE=getNet(datatraining,A,E,T);save netAE.mat netAE;
netAF=getNet(datatraining,A,F,T);save netAF.mat netAF;
netAG=getNet(datatraining,A,G,T);save netAG.mat netAG;
netAH=getNet(datatraining,A,H,T);save netAH.mat netAH;
netAI=getNet(datatraining,A,I,T);save netAI.mat netAI;
netAJ=getNet(datatraining,A,J,T);save netAJ.mat netAJ;
netBC=getNet(datatraining,B,C,T);save netBC.mat netBC;
netBD=getNet(datatraining,B,D,T);save netBD.mat netBD;
netBE=getNet(datatraining,B,E,T);save netBE.mat netBE;
netBF=getNet(datatraining,B,F,T);save netBF.mat netBF;
netBG=getNet(datatraining,B,G,T);save netBG.mat netBG;
netBH=getNet(datatraining,B,H,T);save netBH.mat netBH;
netBI=getNet(datatraining,B,I,T);save netBI.mat netBI;
netBJ=getNet(datatraining,B,J,T);save netBJ.mat netBJ;
netCD=getNet(datatraining,C,D,T);save netCD.mat netCD;
netCE=getNet(datatraining,C,E,T);save netCE.mat netCE;
netCF=getNet(datatraining,C,F,T);save netCF.mat netCF;
netCG=getNet(datatraining,C,G,T);save netCG.mat netCG;
netCH=getNet(datatraining,C,H,T);save netCH.mat netCH;
netCI=getNet(datatraining,C,I,T);save netCI.mat netCI;
netCJ=getNet(datatraining,C,J,T);save netCJ.mat netCJ;
netDE=getNet(datatraining,D,E,T);save netDE.mat netDE;
netDF=getNet(datatraining,D,F,T);save netDF.mat netDF;
netDG=getNet(datatraining,D,G,T);save netDG.mat netDG;
netDH=getNet(datatraining,D,H,T);save netDH.mat netDH;
netDI=getNet(datatraining,D,I,T);save netDI.mat netDI;
netDJ=getNet(datatraining,D,J,T);save netDJ.mat netDJ;
netEF=getNet(datatraining,E,F,T);save netEF.mat netEF;
netEG=getNet(datatraining,E,G,T);save netEG.mat netEG;
netEH=getNet(datatraining,E,H,T);save netEH.mat netEH;
netEI=getNet(datatraining,E,I,T);save netEI.mat netEI;
netEJ=getNet(datatraining,E,J,T);save netEJ.mat netEJ;
netFG=getNet(datatraining,F,G,T);save netFG.mat netFG;
netFH=getNet(datatraining,F,H,T);save netFH.mat netFH;
netFI=getNet(datatraining,F,I,T);save netFI.mat netFI;
netFJ=getNet(datatraining,F,J,T);save netFJ.mat netFJ;
netGH=getNet(datatraining,G,H,T);save netGH.mat netGH;
netGI=getNet(datatraining,G,I,T);save netGI.mat netGI;
netGJ=getNet(datatraining,G,J,T);save netGJ.mat netGJ;
netHI=getNet(datatraining,H,I,T);save netHI.mat netHI;
netHJ=getNet(datatraining,H,J,T);save netHJ.mat netHJ;
netIJ=getNet(datatraining,I,J,T);save netIJ.mat netIJ;

TOT=zeros(1,10);
Uji=datatraining(:,5);

gA=0;
gB=0;
gC=0;
gD=0;
gE=0;
gF=0;
gG=0;
gH=0;
gI=0;
gJ=0;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Y = sim(netAB,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gB=gB+1; 
end    

Y = sim(netAC,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gC=gC+1; 
end   

Y = sim(netAD,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gD=gD+1; 
end    

Y = sim(netAE,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gE=gE+1; 
end   

Y = sim(netAF,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netAG,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netAH,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netAI,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netAJ,Uji);
g= vec2ind(Y);
if g==1
    gA=gA+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netBC,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gC=gC+1; 
end   

Y = sim(netBD,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gD=gD+1; 
end   

Y = sim(netBE,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gE=gE+1; 
end   

Y = sim(netBF,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netBG,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netBH,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netBI,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netBJ,Uji);
g= vec2ind(Y);
if g==1
    gB=gB+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netDE,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gE=gE+1; 
end   

Y = sim(netCD,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gD=gD+1; 
end   

Y = sim(netCE,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gE=gE+1; 
end   

Y = sim(netCF,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netCG,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netCH,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netCI,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netCJ,Uji);
g= vec2ind(Y);
if g==1
    gC=gC+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netDF,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netDG,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netDH,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netDI,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netDJ,Uji);
g= vec2ind(Y);
if g==1
    gD=gD+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netEF,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gF=gF+1; 
end   

Y = sim(netEG,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netEH,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netEI,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netEJ,Uji);
g= vec2ind(Y);
if g==1
    gE=gE+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netFG,Uji);
g= vec2ind(Y);
if g==1
    gF=gF+1;
elseif g==2
    gG=gG+1; 
end   

Y = sim(netFH,Uji);
g= vec2ind(Y);
if g==1
    gF=gF+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netFI,Uji);
g= vec2ind(Y);
if g==1
    gF=gF+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netFJ,Uji);
g= vec2ind(Y);
if g==1
    gF=gF+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netGH,Uji);
g= vec2ind(Y);
if g==1
    gG=gG+1;
elseif g==2
    gH=gH+1; 
end   

Y = sim(netGI,Uji);
g= vec2ind(Y);
if g==1
    gG=gG+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netGJ,Uji);
g= vec2ind(Y);
if g==1
    gG=gG+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netHI,Uji);
g= vec2ind(Y);
if g==1
    gH=gH+1;
elseif g==2
    gI=gI+1; 
end   

Y = sim(netHJ,Uji);
g= vec2ind(Y);
if g==1
    gH=gH+1;
elseif g==2
    gJ=gJ+1; 
end   

Y = sim(netIJ,Uji);
g= vec2ind(Y);
if g==1
    gI=gI+1;
elseif g==2
    gJ=gJ+1; 
end   

gA
gB
gC
gD
gE
gF
gG
gH
gI
gJ

siapa='?';
citra=[''];
if gA>=gB && gA>=gC && gA>=gD && gA>=gE && gA>=gF && gA>=gG && gA>=gH && gA>=gI && gA>=gJ
    siapa='klasifikasi1';
    citra=['datalatih/1.jpg'];
elseif gB>=gA && gB>=gC && gB>=gD && gB>=gE && gB>=gF && gB>=gG && gB>=gH && gB>=gI && gB>=gJ
    siapa='klasifikasi2';
    citra=['datalatih/4.jpg'];
elseif gC>=gB && gC>=gA && gC>=gD && gC>=gE && gC>=gF && gC>=gG && gC>=gH && gC>=gI && gC>=gJ
        siapa='klasifikasi3';
    citra=['datalatih/7.jpg'];
elseif gD>=gB && gD>=gC && gD>=gA && gD>=gE && gD>=gF && gD>=gG && gD>=gH && gD>=gI && gD>=gJ
       siapa='klasifikasi4';
    citra=['datalatih/10.jpg'];
elseif gE>=gB && gE>=gC && gE>=gD && gE>=gA && gE>=gF && gE>=gG && gE>=gH && gE>=gI && gE>=gJ
       siapa='klasifikasi5';
    citra=['datalatih/13.jpg'];
elseif gF>=gB && gF>=gC && gF>=gD && gF>=gE && gF>=gA && gF>=gG && gF>=gH && gF>=gI && gF>=gJ
        siapa='klasifikasi6';
    citra=['datalatih/16.jpg'];
elseif gG>=gB && gG>=gC && gG>=gD && gG>=gE && gG>=gF && gG>=gA && gG>=gH && gG>=gI && gG>=gJ
        siapa='klasifikasi7';
    citra=['datalatih/19.jpg'];
elseif gH>=gB && gH>=gC && gH>=gD && gH>=gE && gH>=gF && gH>=gG && gH>=gA && gH>=gI && gH>=gJ
        siapa='klasifikasi8';
    citra=['datalatih/22.jpg'];
elseif gI>=gB && gI>=gC && gI>=gD && gI>=gE && gI>=gF && gI>=gG && gI>=gH && gI>=gA && gI>=gJ
        siapa='klasifikasi9';
    citra=['datalatih/5.jpg'];
elseif gJ>=gB && gJ>=gC && gJ>=gD && gJ>=gE && gJ>=gF && gJ>=gG && gJ>=gH && gJ>=gI && gJ>=gA
        siapa='klasifikasi10';
    citra=['datalatih/28.jpg'];


end




Sehingga Kita bisa menerapkan LVQ bawaannya Matlab ke dalam multi row atau banyak klasifikasi Output yang diinginkan.....



Hasil :
gA =

     1


gB =

     2


gC =

     9


gD =

     7


gE =

     8


gF =

     5


gG =

     6


gH =

     2


gI =

     2


gJ =


     3


Klasifiaksi kategori 3 atau gC dengan nilai tertinggi (9)./ Terbukti karena Uji=datatraining(:,5) terletak pada klasifikasi / gropu ke 3 atau C.
datatarget=[1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10];
%dtatargetsim =[AAABBBCCCDDDEEEFFFGGGHHHIIIJJJ]

dengan code generatenya adlah sbb:

al=['datalatih/'];
B=30;
path=[al '1.jpg'];
I=imread(path);
ED=double(getNormalisasi(I));
w=size(ED,1);
h=size(ED,2);
wh=w*h;
for i=1:B
    path=[al num2str(i) '.jpg']
    I=imread(path);
    ED=double(getNormalisasi(I));
    M=reshape(ED,[1,wh]);
    datalatih(i,:)=M;
end    

datatarget=[1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10];
save datalatih.mat datalatih
save datatarget.mat datatarget


msgbox('Generate Berhasil','sukse','help');

oK SELAMAT MENCOBAAA...................................


4 komentar:

  1. Kk aku mau belajar dong tntang NN+GA

    BalasHapus
  2. ka, saya juga mau belajar tentang matlab

    BalasHapus
  3. saya mau bertanya ka, bagaimana cara membuat arsitektur pada matlab ka ?

    BalasHapus