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 ...

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-...

SOLID - Prinsip Desain Arsitektur Di Dalam Pemrograman Object Oriented (Dependency Inversion Principal)

Akhirnya kita sampai di bagian paling akhir dari seri tulisan SOLID Principal yaitu untuk huruf D.  Ketika kita bekerja menggunakan bahasa pemrograman berorientasi object, kita pasti akan menggunakan Class. Class tersebut pada akhirnya akan saling terkait /  ketergantungan satu dan yang lain untuk melakukan tugas tertentu.  Ketergantungan ini disebut dengan istilah  Dependency.  Dependency ini bisa terjadi antar Class di dalam satu  Code Base  yang sama, atau bahkan antar  Library.  Controhnya seperti potongan kode berikut. <?php namespace App\DependencyInversion; /** * Description of Engine * * @author programmer */ class Engine { private KeihinCarburator $carburator ; private NGKSpark $spark ; public function __construct (KeihinCarburator $carburator , NGKSpark $spark ) { $this -> carburator = $carburator ; $this -> spark = $spark ; } public funct...