Langsung ke konten utama

Contoh Program Voted Perceptron

     Selamat malam pemirsa, jumpa lagi malam ini dengan saya. Mumpung lagi lumayan free hari ini, saya mau lanjutin tulisan saya sebelumnya tentang algoritma voted-perceptron. Kalo kemarin udah bahas tentang algoritma dan contoh perhitungan manualnya, kali ini saya mau lanjutin tentang contoh program sederhana menggunakan bahasa php. Langsung cekidot...

Persiapan Data

     Data yang akan saya pakai kali ini data logika AND yang juga saya pakai di tulisan saya sebelumnya.
$data = array(
      array(1,1),
      array(1,-1),
      array(-1,1),
      array(-1,-1)
     ); // data latih
$label = array(1,-1,-1,-1); // target label data latih

Class voted perceptron

     Pertama kita buat class voted-perceptron yang digunakan untuk implementasi algoritma voted perceptron.

class Voted_perceptron{


}

Pelatihan

     Berikut adalah fungsi yang dibuat untuk melakukan pelatihan data training untuk mendapatkan nilai v, c, dan k.

 function train($data_latih,$label,$max_epoh){ //fungsi pelatihan untuk mencari nilai v,c,dan k
  $v = array(array_fill(0,count($data_latih[0]),0));
  $k = 0;
  $c = array(1);
  for($iterasi = 0;$iterasi <= $max_epoh;$iterasi++){
   $cek= "";
   for($x = 0;$x<count($data_latih);$x++){
    $y = $this->dot_product($data_latih[$x],$v[$k]);
    if($y ==$label[$x]){
     $c[$k] = $c[$k]+1;
     $cek .=1;
    }else{
     $vk = array();
     for($a = 0;$a < count($data_latih[$x]);$a++){
      $vk[$a] = $v[$k][$a]+($label[$x]*$data_latih[$x][$a]);
     }
     array_push($v,$vk);
     array_push($c,1);
     $k = $k + 1;
     $cek .=0;
    }
   }
   $ck = strpos($cek,"0");
   if($ck===FALSE){
    $iterasi = $max_epoh;
   }
  }
  $out = array('v'=>$v,'c'=>$c,'k'=>$k);
  return $out;
 }
 
Fungsi di atas menghasilkan nilai v,c dan k berupa array. Berikut fungsi dot product yang di gunakan untuk menghitung nilai output.

function dot_product($data,$v){
  $y_in = 0;
  for($x = 0;$x < count($data);$x++){
   $y_in = $y_in + ($data[$x]*$v[$x]);
  }
  return $this->sign($y_in); 
 }
 
Dan untuk mendapatkan nilai output berupa 1 atau -1, maka dilakukan perhitungan dengan fungsi aktivasi berikut.

 function sign($y_in){ // aktivasi
  if($y_in > 0){
   $y = 1;
  }else{
   $y = -1;
  }
  return $y;
 }
 
dan berikut adalah hasil dari proses training
dan di dapat nilai v = {(0,0),(1,1)}, c = {1,8} dan k = {2}(karena array di mulai dari index 0).

Uji Coba / Klasifikasi

     Untuk proses uji coba saya juga masih menggunakan data logika AND di atas. Dan berikut adalah fungsi klasifikasi

 function classifier($data,$v,$c,$k){ // fungsi untuk klasifikasi
  $s = 0;
  for($x = 0;$x <= $k;$x++){
   $y_in = 0;
   $row = 0;
   for($y=0;$y<count($v[$x]);$y++){
    $y_in = $y_in +($v[$x][$y]*$data[$y]);
    $row++;
   }
   $s = $s +($c[$x]*$this->sign($y_in));
  }
  return $this->sign($s);
 }
 
dan kita lakukan uji coba

$voted = new Voted_perceptron;
$out = $voted->train($data,$label,5); //melakukan proses training
$uji = array(array(-1,-1),array(-1,1),array(1,-1),array(1,1)); //data uji
for($x=0;$x<count($uji);$x++){
 $hasil = $voted->classifier($uji[$x],$out['v'],$out['c'],$out['k']); //melakukan klasifikasi
 echo "Data ".($x+1)." ";
 print_r($uji[$x]);
 echo "  Hasil : ".$hasil."</br>";
}

hasilnya sebagai berikut
 

dan hasilnya semua data dapat di klasifikasikan dengan benar. 
     Sekian dulu tulisan saya kali ini. Source code bisa di download di sini

Komentar

Postingan populer dari blog ini

Contoh Perhitungan Algoritma Perceptron

      Melanjutkan tulisan saya sebelumnya tentang algoritma perceptron,kali ini saya akan menulis tentang conto perhitungan manual algoritma perceptron. Untuk contoh kasusnya saya menggunakan data logika AND. Cekidot.... Algoritma      Data yang kita gunakan sebagai contoh adalah data logika AND sebagai berikut: x1 x2 target 0 0 0 0 1 0 1 0 0 1 1 1       tentukan bobot awal secara acak, saya pakai contoh w1 = 0,w2 =0, learning rate = 1, bias = 0,maksimal epoh = 10. Disini saya memakai fungsi aktivasi undak biner. Epoh ke 1 Data ke satu x = {0,0}, bobot w = {0,0},b=0,target = 0 y_in = (x1*w1)+(x2*w2)+b = (0*0)+(0*0)+0 = 0 y = sign(0) = 1 karena y != target maka hitung error dan update bobot  error = target - y = 0 - 1 = -1 w1_baru = w1_lama +(learning_rate*error*x1)                = 0 + (1*(-1)*0) = 0 w2_baru = w2_lama +(learning_rate*error*x2)                = 0+(1*(-1)*0) = 0

Pemrograman Berorientasi Object - Overloading dan Overriding

       Function atau method overloading dan override adalah fitur yang sangat mendasar dan berguna dari bahasa OOP manapun. Dalam tutorial ini kita akan membahas implementasi metode overloading dan override di php. Di sini pertama kita akan membahas dasar-dasar overloading dan override. Setelah eksplorasi dasar kita akan menerapkan overloading dan override di php. Sebelum melangkah lebih jauh, saya mengasumsikan bahwa Anda memiliki pengetahuan dasar tentang class dan pewarisan di php. Anda juga memiliki pemahaman tentang magic method di php. Magic method karena overloading di php bisa di implmentasikan dengan menggunakan magic method. Overriding        Arti dasar dari overriding di OOP sama dengan arti kata sebenarnya. Dalam arti kata sebenarnya dari overriding adalah menggantikan perilaku orang tua yang sama pada anak. Ini sama dengan override method di OOP. Dalam arti OOP, override adalah mengganti method class induk di class anak. Atau dengan method kata kunci sederhana yang me

Contoh Perhitungan Algoritma Learning Vector Quantization

Melanjutkan tulisan saya tentang algoritma Learning Vector Quantization yang lalu, kali ini saya akan melanjutkan dengan contoh perhitungan manual. Berikut ini contoh data yang akan kita hitung. No X1 X2 X3 X4 target 1 0 1 1 0 0 2 0 0 1 1 1 3 1 1 1 1 0 4 1 0 0 1 1 pada contoh di atas, saya menggunakan 4 data sebagai data training beserta target yang bertujuan untuk mendapatkan bobot yang akan digunakan pada proses klasifikasi. Bobot awal adalah { 1, 1, 1, 0} dan { 1, 0, 1, 1} dengan learning rate 0,05 dengan fungsi pembelajaran = 0,1. Pelatihan Iterasi ke 1 1. Data ke 1 { 0, 1, 1, 0} dengan target 0, bobot = {{ 1, 1, 1, 0},{ 1, 0, 1, 1}}      - menghitung bobot untuk masing masing output :          kelas 0 = sqrt(((0-1)^2)+((1-1)^2)+((1-1)^2)+((0-0)^2)) = 1         kelas 1 = sqrt(((0-1)^2)+((1-0)^2)+((1-