Laman

Kamis, 07 April 2011

Algoritma Learning Vector Quantization in C# ( C Sharp )

Learning Vector Quantization (LVQ) adalah salah satu jenis jaringan saraf tiruan dimana metode ini melakukan pembelajaran pada lapisan kompetitif yang terawasi. Suatu 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 meletakkan kedua vector input tersebut kedalam kelas yang sama. berikut ini adalah algoritma dari Learning Vector Quantizarion (LVQ).
Gambar 1. Desain Aplikasi

1. Tetapkan bobot (W) dan maksimum epoch, learning rate, error yang diharapkan
2. Masukan input yang terdiri dari data input x(m,n) dan targetT(1,n)
3. Tetapkan kondisi awal (epoch=0), error yang diharapkan=1
4. kerjakan jika (epocheps)
    -epoch=epoch +1
    -kerjakan untuk i=1 sampai n
    -tentukan j sedemikian rupa sehingga ||x-wj|| minimum sebut dengan Ci
   - Perbaiki wj dengan ketentuan
         - jika T=C maka
                       wj(baru)=wj(lama)+learningrate(x-wj(lama))
         - jika T!=C maka
                       wj(baru)=wj(lama)-learningrate(x-wj(lama))
    -kurangin learning rate 

Oke.. sekarang akan dibuat program untuk mengimplementasikan algoritma diatas (LVQ), seperti biasanya, sebelumnya silahkan siapakan project kososng telebih dahulu, klik file pilih new project pada IDE yang digunakan, pada contoh kasus yang saya gunakan adalah visual studio 2010. Pada kotak project name, silahkan isi nama project sesuai dengan keinginan, tidak ada aturan kusus dalam penamaan project. Setelah itu ikuti langkah demi langkah dibawah ini
langkah 1 : pada project kosong yang telah disiapkan sebelumnya, silahkan tambahkan komponen komponen  yang diperlukan seperti textbox, dataGridView maupun label. atur dan tata sedemikian rupa sehingga tampilannya seperti pada gambar diatas 
langkah 2 : tambahkan function bernama lvq, source code seperti dibawa ini
private Int16 lvq(double[] bobot1, double[] bobot2, double[] data,int temTarget){
 double totalBobot1=0;
 double totalBobot2=0;
 for (int i = 0; i < bobot1.Length; i++){
   totalBobot1 = totalBobot1+Math.Pow((data[i]bobot1[i]),2);
   totalBobot2 = totalBobot2+Math.Pow((data[i] - bobot2[i]),2);}
   if (Math.Pow(totalBobot1, 0.5) <=Math.Pow(totalBobot2,0.5))
   {        
     if (temTarget == 1)
     { return 1; }
     else //target sama dengan 2
     { return 3 ;  }
   }
   else
   {
    if (temTarget == 2)
    {     return 2;    }
    else { return 4;
    }}}

langkah 3 : tambahkan function bernama update bobot, source code lengkap dibawah ini
private double[] updateBobot(double[] bobot, double[] data, double alpha,int statusTarget){
double[] temp = newdouble[bobot.Length];
if (statusTarget == 1)
{
 for (int i = 0; i < bobot.Length; i++)
 {temp[i] = bobot[i] + (alpha * (data[i] - bobot[i]));}}
  else{
  for (int i = 0; i < bobot.Length; i++){
  temp[i] = bobot[i] - (alpha * (data[i] - bobot[i]));}}
  return temp;
 }

langkah 4 : sedangka pada button procces tambahkan source code seperti dibawah ini
dataGridView1.Rows.Clear();
loadData();
dataGridView1.Rows.Add(data.GetLength(0));
for (int i = 0; i < data.GetLength(0); i++)
{
 dataGridView1.Auto ResizeRowHeadersWidth
(i,dataGridviewRowHeaderswidthSizeMode.AutoSizeToDisplayedHeaders);
 dataGridView1.Rows[i].HeaderCell.Value = "Data ke-"+(i + 1).ToString();
 dataGridView1.Rows[i].Cells[0].Value = data[i, 0].ToString();
 dataGridView1.Rows[i].Cells[1].Value = data[i, 1].ToString();
 dataGridView1.Rows[i].Cells[2].Value = data[i, 2].ToString();
 dataGridView1.Rows[i].Cells[3].Value = data[i, 3].ToString();
 dataGridView1.Rows[i].Cells[4].Value = data[i, 4].ToString();
 dataGridView1.Rows[i].Cells[5].Value = data[i, 5].ToString();
 }
for (int p = 0; p < 10; p++ )
{
    for (int i = 0; i < data.GetLength(0); i++)
    {       
        double[] temp = new double[data.GetLength(1)];
        int tempTarget = target[i];
        for (int j = 0; j < data.GetLength(1); j++)
        {
            temp[j] = data[i, j];
        }   
        if (lvq(bobot1, bobot2, temp, tempTarget) == 1)
        {
            bobot1 = updateBobot(bobot1, temp, alpha, 1);
        }
        else if (lvq(bobot1, bobot2, temp, tempTarget) == 3)
        {
            bobot1 = updateBobot(bobot1, temp, alpha, 2);
        }
        else if (lvq(bobot1, bobot2, temp, tempTarget) == 2)
        {
            bobot2 = updateBobot(bobot2, temp, alpha, 1);
        }
        else if (lvq(bobot1, bobot2, temp, tempTarget) == 4)
        {
            bobot2 = updateBobot(bobot2, temp, alpha, 2);
        }   
    }
    alpha = alpha - (0.1 * alpha);
langkah 5 : Done, program selesai dibuat. jika langkah langkah diatas dilakukan dengan benar, maka program akan mampu mengimplementasikan algoritma Learning Vector Quantization seperti yang sudah dijelaskan diatas.
berikut ini adalah hasil preview dari program yang telah dirunning

 Gambar 2. Hasil preview program LVQ dengan max epoch 10 dan learning rate 0.05
untuk memahami tutorial ini silahkan download contoh programnya disini dan juga download projectnya disini
download program disini
download project disini
for more information contact on informasi@csharp-indonesia.com
pandauan download : klik link download yang disediaan diatas, setelah itu akan muncul halaman adf.ly, tunggu beberapa detik sampai pada pojok kanan atas muncul tulisan skip ad. klik tombol tersebut ,setelah itu akan muncul halaman ziddu, silahkan klik pada button download yang muncul pada halaman ziddu
NB : Dalam tutorial ini program ditulisa menggunakan IDE Visual studio 2010. dengan target framework 3.5. Sehingga minimal komputer harus terinstal windows vista untuk bisa menjalankan program *.exe nya, Atau windows xp yang sudah di instal netFrameWork 4.0. Sedangkan untuk membuka projectnya mau tidak mau harus menginstal microsoft visual studio 2010
Artikel Terkait 

6 komentar:

  1. bisa minta tolong di kirimkan tutorial lengkap mengenai algoritma LVQ? disertai dengan contoh yang mudah untuk memahaminya.
    saya sangat butuh materi ini. terima kasih atas perhatiannya.

    BalasHapus
  2. Saya juga, boleh minta tutorial lengkap mengenai LVQ? saya cuma punya yg dr bukunya sri kusumadewi. api kurang paham cara perhitungannya, cara pembelajaran dan pelatihannya. mohon bantuannya. kalau source code yg VB ada gag ya?
    trimakasih.. salam kenal dan sukses selalu..

    BalasHapus
  3. gan, uda dapet tentang lvq kah?
    salam kenal.. pU2t26@gmail.com

    BalasHapus
  4. udah dapet belum semua?
    salam kenal
    febriantura@gmail.com

    BalasHapus
  5. Jonsari Chrisnal Saragih27 Januari 2014 00.17

    gan,
    kalau udah dapat tolong kirim samakulah,
    butuh banget ini masalahnya,
    mau tugas akhir,
    udah lama tertunda gara2 gak dapat hitung manualnya


    chrisnal_smktel@yahoo.com
    tolong banget gan :(

    BalasHapus
  6. Algoritma LVQ sebenarnya untuk proses perhitungannya tidak terlalu rumit, tinggal mengukur jarak satu data dengan data set yang ada setelah itu melakukan update pada bobot.
    kalau untuk VB saya tidak punya....

    BalasHapus