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....
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
di atas adalah function untuk melakukan pelatihan beserta penjelasannya.
di atas adalah function untuk menghitung nilai y_in dan di aktivasi menggunakan fungsi undak biner untuk menghitung output Y.
untuk memulai pelatihan adalah sebagai berikut
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.
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.
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; } } ?>
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; }
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
Demikian contoh program sederhana ini. Jika agan ingin mencoba langsung, source code bisa anda download di sini. Sekian dari saya, sampai jumpa.
Thanks gan, sangat membantu!
BalasHapusterima kasih gan atas kunjungannya...
HapusBisa ndak gan perhitungan jumlah kalori harian penderita diabetes melitus menggunakan logika fuzy di php .... mintak tolong pencerahanya gan
BalasHapusfuzzy nya fuzzy apa gan ? trus parameter yang mau dihitung apa aja ?
Hapusanjeng pengen berhenti kuliah bgst...susah bener
BalasHapus