Langsung ke konten utama

Contoh Program Algoritma Perceptron

      Melanjutkan tulisan saya sebelumnya mengenai algoritma perceptron, kali ini saya buat contoh program sederhana menggunakan bahasa php. Dan data yang saya pakai adalah data logika AND yang juga saya pakai dalam tulisan saya sebelumnya. Langsung saya ke tekape....

Proses Training

Persiapan Data

/////data latih
$data = array(
 array(0,0),
 array(0,1),
 array(1,0),
 array(1,1)
 );
$label = array(0,0,0,1); // label atau target
$learning_rate = 1;   // learning rate
$bias = 0;     // bobot bias awal
$max_epoh = 10;    // maksimal iterasi
$weight = array(0,0);  // bobot awal

di atas adalah data yang akan saya gunakan, sama persis dengan data yang saya gunakan pada tulisan  sebelumnya.

Class perceptron

<?php
class Perceptron{
 
 private $learning_rate;
 private $weight;
 private $bias;
 
 function set_learning_rate($learning_rate){  // function untuk mengeset learning rate
  $this->learning_rate = $learning_rate;
 }
 
 function set_weight($weight){     // function untuk mengeset bobot awal
  $this->weight = $weight;
 }
 
 function set_bias($bias){       // function untuk mengeset bias awal
  $this->bias = $bias;
 }
}
?>
 di atas saya membuat class percptron untuk implementasi algoritma perceptron, dan function set_learning_rate untuk mengeset learning rate,st_weight untuk mengeset nilai bobot awal,dan set_bias untuk mengatur nilai bias awal


Function Pelatihan

function training($data,$label,$max_epoh){      // function pelatihan
  for($a = 0;$a < $max_epoh;$a++){   // perulangan sebanyak epoh
   $cek ="";
   echo "Epoh Ke : ".($a+1)."</br>";
   for($x = 0; $x < count($data); $x++) { // perulangan untuk mengolah data per baris
    $weight = $this->weight;
    $bias = $this->bias;
    $y = $this->dot_product($data[$x],$weight,$bias); // melakukan perhitungan nilai y
    if($y == $label[$x]){   // jika output sama dengan label, bobot dan bias tidak berubah
     $cek .="1";
     $this->weight = $weight;
     $this->bias = $bias;
    }else{       // jika output berbeda, hitung error dan update bobot beserta bias
     $cek .="0";
     $error = $label[$x] - $y;
     $this->weight = $this->update_weight($weight,$this->learning_rate,$error,$data[$x]);
     $this->bias = $this->update_bias($bias,$this->learning_rate,$error);
    }
    echo "Bobot : ";
    for($b=0;$b<count($this->weight);$b++){
     echo $this->weight[$b]."   ";
    }
    echo "Bias : ".$this->bias."</br>";
   }
   $ck = strpos($cek,"0");     // cek apakah dalam satu iterasi ada error
   if($ck===FALSE){      // jika tidak ada error, iterasi dihentikan
    $a = $max_epoh;
   }
  }
  $out = array($this->weight,$this->bias);
  return $out;
 }

di atas adalah function untuk melakukan pelatihan beserta penjelasannya.

Function menghitung nilai Y

function dot_product($data,$weight,$bias){ // menghitung nilai y_in,
  $y_in = 0;
  for($x = 0;$x < count($data);$x++){
   $y_in = $y_in + ($data[$x]*$weight[$x]);
  }
  $y = $y_in + ($bias);
  return $this->sign($y);     // mengaktivasi y_in
 } 
 
 function sign($y_in){      // fungsi aktivasi undak biner
  if($y_in>=0){
   $y = 1;
  }else{
   $y = 0;
  }
  return $y;
 }

di atas adalah function untuk menghitung nilai y_in dan di aktivasi menggunakan fungsi undak biner untuk menghitung output Y.

Function perubahan Bobot W dan Bobot Bias b

function update_weight($weight,$learning_rate,$error,$data){ // function update bobot 
  $weight_new = array();
  for($x = 0;$x < count($weight);$x++){
   $weight_new[$x] = $weight[$x] +($learning_rate*$error*$data[$x]);
  }
  return $weight_new;
 }
 
 function update_bias($bias,$learning_rate,$error){    // function update bobot bias
  $bias_new = $bias +($learning_rate*$error);
  return $bias_new;
 }

di atas merupakan function untuk menghitung perubahan bobot dan bias.

untuk memulai pelatihan adalah sebagai berikut

$nn = new Perceptron(); 
$nn->set_learning_rate($learning_rate);
$nn->set_weight($weight);
$nn->set_bias($bias);
echo "proses pelatihan :</br>";
$out = $nn->training($data,$label,$max_epoh); //melakukan training untuk mendapatkan bobot dan bias 

dan berikut adalah hasil running..

 dari hasil running tersebut, ternyata iterasi berhenti di iterasi yang ke enam karena bobot dan bias sudah tidak berubah lagi. dan di peroleh bobot w = (2,1) dan bias = -3,dan bobot dan bias yang terakhir di pakai untuk proses klasifikasi.



















Proses Klasifikasi

untuk proses klasifikasi sebagai berikut

$bobot = $out[0];
$bias = $out[1];
$data_uji = array(1,1);  // data uji (silahkan ubah data ini untuk melakukan pengujian bobot akhir)
$hasil = $nn->classification($data_uji,$bobot,$bias); // melakukan proses klasifikasi dengan data uji
echo $hasil;    // hasil klasifikasi

 di atas saya menggunakan contoh data uji x = (1,1).

      Demikian contoh program sederhana ini. Jika agan ingin mencoba langsung, source code bisa anda download di sini. Sekian dari saya, sampai jumpa.

Komentar

  1. Bisa ndak gan perhitungan jumlah kalori harian penderita diabetes melitus menggunakan logika fuzy di php .... mintak tolong pencerahanya gan

    BalasHapus
    Balasan
    1. fuzzy nya fuzzy apa gan ? trus parameter yang mau dihitung apa aja ?

      Hapus
  2. anjeng pengen berhenti kuliah bgst...susah bener

    BalasHapus

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