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.