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

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

Part 7 : Normalisasi Histogram

Menyambung tulisan saya yang sebelumnya tentang pengolahan citra khususnya histogram,kali ini saya lanjutkan tentang Normalisasi histogram.Sebelumnya saya harap agan sudah mengerti tentang histogram.Jika belum bisa di baca dulu di tulisan saya sebelumnya di sini . Normalisasi Histogram adalah menskalakan nilai piksel secara linear untuk menggunakan secara penuh jangkauan yang tersedia. Rumus :  Keterangan : n k= nilai grayscale dari piksel ke k(k = 0,1,2,3....) min = nilai grayscale terkecil yang diperoleh dari histogram max = nilai grayscale terbesar L = range nilai grayscale citra Contoh perhitungan : dari tabel di atas,nilai min adalah 2 yaitu nilai grayscale terkecil dari citra dan max adalah 5 s = 0 - 2 /5 - 2 =0 (untuk n = 0)  hasil = 0 x 7(nilai maksimal grayscale) = 0 sk = 3 - 2 /5 - 2 = 0.333  (untuk n = 3) hasil = 0.333 x 7 = 2 keterangan : 7 adalah range grayscale dari citra,dan untuk banyak kasus biasanya memakai 255. Tujuan Normalisasi...