Selamat Datang di blog sederhana saya,Semoga apa yang Kalian Inginkan dapat terpenuhi disini.

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.

Share:

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

  1. 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
bias_baru = bias_lama + (learning_rate*error)
                = 0 +(1*(-1)) = -1

maka didapat bobot baru w = {0,0},b = -1 dan lanjutkan untuk data yang ke dua

Data ke dua x = {0,1},w = {0,0} ,b=-1,target = 0


y_in = (x1*w1)+(x2*w2)+b = (0*0)+(1*0)+(-1) = -1
y = sign(-1) = 0

karena y == target maka tidak perlu dilakukan perbaikan bobot dan lanjutkan untuk data yang ke tiga

Data ke tiga x = {1,0},w = {0,0},b = -1 target = 0


y_in = (x1*w1)+(x2*w2) +b= (1*0)+(0*0)+(-1) = -1
y = sign(-1) = 0

karena y == target maka tidak perlu dilakukan perbaikan bobot dan lanjutkan untuk data yang ke empat

Data ke empat x = {1,1} w = {0,0},b = -1 target = 1

y_in = (x1*w1)+(x2*w2)+b = (1*0)+(1*0)+(-1) = -1
y = sign(-1) = 0

karena y != target maka hitung error dan update bobot
 error = target - y = 1 - 0 = 1
w1_baru = w1_lama +(learning_rate*error*x1)
               = 0 + (1*(1)*1) = 1
w2_baru = w2_lama +(learning_rate*error*x2)
               = 0+(1*(1)*1) = 1
bias_baru = bias_lama + (learning_rate*error)
                = -1 +(1*1) = 0

maka didapat bobot baru w = {1,1},b = 0 dan lanjutkan untuk data selanjutnya

karena di epoh pertama masih ada eror, maka perhitungan di lanjutkan ke epoh berikutnya

Epoh ke dua

Data ke satu dengan x = {0,0},w = {1,1},b=0,target = 0

y_in = (x1*w1)+(x2*w2)+b = (0*1)+(0*1)+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)
               = 1 + (1*(-1)*0) = 1
w2_baru = w2_lama +(learning_rate*error*x2)
               = 1+(1*(-1)*0) = 1
bias_baru = bias_lama + (learning_rate*error)
                = 0 +(1*(-1)) = -1
maka didapat bobot baru w = {1,1},b=-1 dan lanjutkan untuk data yang ke dua

Data ke dua dengan x = {0,1},w = {1,1},b=-1,target = 0

y_in = (x1*w1)+(x2*w2)+b = (0*1)+(1*1)+(-1) = 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)
               = 1 + (1*(-1)*0) = 1
w2_baru = w2_lama +(learning_rate*error*x2)
               = 1+(1*(-1)*1) = 0
bias_baru = bias_lama + (learning_rate*error)
                = -1 +(1*(-1)) = -2
maka didapat bobot baru w = {1,0},b=-2 dan lanjutkan untuk data yang ke tiga

Data ke tiga dengan x = {1,0}, w = {1,0}, b=-2, target = 0

y_in = (x1*w1)+(x2*w2)+b = (1*1)+(0*0)+(-2) = -1
y = sign(-1) = 0

karena y == target maka tidak perlu dilakukan perbaikan bobot dan lanjutkan untuk data yang ke empat

Data ke empat dengan x ={1,1},w ={1,0},b=-2, target = 1

y_in = (x1*w1)+(x2*w2)+b = (1*1)+(1*0)+(-2) = -1
y = sign(-1) = 0

karena y != target maka hitung error dan update bobot
 error = target - y = 1 - 0 = 1
w1_baru = w1_lama +(learning_rate*error*x1)
               = 1 + (1*1*1) = 2
w2_baru = w2_lama +(learning_rate*error*x2)
               = 0+(1*1*1) = 1
bias_baru = bias_lama + (learning_rate*error)
                = -2 +(1*1) = -1

maka didapat bobot baru w = {2,1},b=-1. Karena di epoh ke dua masih ada error,maka di lanjut ke epoh selanjutnya.

Epoh ke tiga

Data ke satu dengan x = {0,0},w = {2,1},b=-1,target = 0

y_in = (x1*w1)+(x2*w2)+b = (0*2)+(0*1)+(-1) = -1
y = sign(-1) = 0

karena y == target maka tidak perlu dilakukan perbaikan bobot dan lanjutkan untuk data yang ke dua

Data ke dua dengan x = {0,1},w = {2,1},b=-1,target = 0

y_in = (x1*w1)+(x2*w2)+b = (0*2)+(1*1)+(-1) = 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)
               = 2 + (1*(-1)*0) = 2
w2_baru = w2_lama +(learning_rate*error*x2)
               = 1+(1*(-1)*1) = 0
bias_baru = bias_lama + (learning_rate*error)
                = -1 +(1*(-1)) = -2
maka didapat bobot baru w = {2,0},b=-2 dan lanjutkan untuk data yang ke tiga

Data ke tiga dengan x = {1,0}, w = {2,0}, b=-2, target = 0

y_in = (x1*w1)+(x2*w2)+b = (1*2)+(0*0)+(-2) = 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)
               = 2 + (1*(-1)*1) = 1
w2_baru = w2_lama +(learning_rate*error*x2)
               = 0+(1*(-1)*0) = 0
bias_baru = bias_lama + (learning_rate*error)
                = -2 +(1*(-1)) = -3
maka didapat bobot baru w = {1,0},b=-3 dan lanjutkan untuk data yang ke empat

Data ke empat dengan x ={1,1},w ={1,0},b=-3, target = 1

y_in = (x1*w1)+(x2*w2)+b = (1*1)+(1*0)+(-3) = -2
y = sign(-2) = 0

karena y != target maka hitung error dan update bobot
 error = target - y = 1 - 0 = 1
w1_baru = w1_lama +(learning_rate*error*x1)
               = 1 + (1*1*1) = 2
w2_baru = w2_lama +(learning_rate*error*x2)
               = 0+(1*1*1) = 1
bias_baru = bias_lama + (learning_rate*error)
                = -3 +(1*1) = -2

maka didapat bobot baru w = {2,1},b=-2. Karena di epoh ke dua masih ada error,maka di lanjut ke epoh selanjutnya.

Epoh ke empat

Data ke satu dengan x = {0,0},w = {2,1},b=-2,target = 0

y_in = (x1*w1)+(x2*w2)+b = (0*2)+(0*1)+(-2) = -2
y = sign(-2) = 0

karena y == target maka tidak perlu dilakukan perbaikan bobot dan lanjutkan untuk data yang ke dua

Data ke dua dengan x = {0,1},w = {2,1},b=-2,target = 0

y_in = (x1*w1)+(x2*w2)+b = (0*2)+(1*1)+(-2) = -1
y = sign(-1) = 0

karena y == target maka tidak perlu dilakukan perbaikan bobot dan lanjutkan untuk data yang ke tiga

Data ke tiga dengan x = {1,0}, w = {2,1}, b=-2, target = 0

y_in = (x1*w1)+(x2*w2)+b = (1*2)+(0*1)+(-2) = 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)
               = 2 + (1*(-1)*1) = 1
w2_baru = w2_lama +(learning_rate*error*x2)
               = 1+(1*(-1)*0) = 1
bias_baru = bias_lama + (learning_rate*error)
                = -2 +(1*(-1)) = -3
maka didapat bobot baru w = {1,1},b=-3 dan lanjutkan untuk data yang ke empat

Data ke empat dengan x ={1,1},w ={1,1},b=-3, target = 1

y_in = (x1*w1)+(x2*w2)+b = (1*1)+(1*1)+(-3) = -1
y = sign(-1) = 0

karena y != target maka hitung error dan update bobot
 error = target - y = 1 - 0 = 1
w1_baru = w1_lama +(learning_rate*error*x1)
               = 1 + (1*1*1) = 2
w2_baru = w2_lama +(learning_rate*error*x2)
               = 1+(1*1*1) = 2
bias_baru = bias_lama + (learning_rate*error)
                = -3 +(1*1) = -2

maka didapat bobot baru w = {2,2},b=-2. Karena di epoh ke dua masih ada error,maka di lanjut ke epoh selanjutnya sampai tidak ada error untuk setiap data dalam satu iterasi atau epoh mencapai maksimal epoh.

Setelah iterasi berhenti,entah itu karena tidak ada error atau jumlah epoh terpenuhi,maka nilai bobot w dan bias b di gunakan dalam proses klasifikasi dengan rumus : 

y_in = (input_1*bobot_1)+(input_2*bobot_2)+......(input_n*bobot_n)+b
output = sign(y_in)

Sementara cukup sekian tulisan saya kali ini. Untuk tulisan selanjutnya akan saya beri contoh program sederhana implementasi dari algoritma perceptron ini. See you.

Share:

Algoritma Perceptron (Rosenblatt, 1958)

Perceptron (Rosenblatt, 1958)

      Selamat malam pemirsa, mumpung agak longgar saya mau nambahin coretan lagi di blog ini. Ngelanjutin tentang Neural network pada tulisan saya sebelumnya. Cekidot...

Pengertian

        Perceptron merupakan salah satu jenis ANN supervised. Perceptron pertama kali diperkenalkan oleh Frank Rosenblatt pada tahun 1958. Perceptron adalah jenis ANN untuk layer tunggal dan mempunyai performa yang baik pada klasifikasi data linear. Untuk klasifikasi data yang tidak linear, perceptron mempunyai performa yang kurang baik.Berikut merupakan arsitektur perceptron.


Gambar arsitektur perceptron

       Dari gambar di atas,x1 dan x2 adalah input. Input di sini adalah parameter atau fitur data yang akan di gunakan untuk data latih maupun data uji. Sedangkan w1 dan w2 adalah bobot. dan y adalah output.

       Perceptron menggunakan fungsi aktivasi untuk mendapatkan output. Untuk penjelasan fungsi aktivasi bisa agan baca di tulisan saya sebelumnya tentang Neural network.

Algoritma

  1. merupakan data latih,x adalah data latih dan y adalah target yang di inginkan, inisialisasi bobot awal w ,learning rate dan maksimal epoh
  2. hitung v dengan rumus v = (x*w)
  3. hitung output dengan fungsi aktivasi output = sign(v)
  4. jika output = target, maka di lanjutkan menghitung data kedua
  5. jika output != target,maka lanjut ke langkah ke enam
  6. hitung error,error = target - output
  7. hitung bobot baru dengan rumus, bobot baru = bobot lama + (learning rate*error*input)
  8. kembali ke langkah kedua untuk menghitung data selanjutnya dengan bobot baru
  9. berhenti jika bobot tidak berubah untuk semua data atau iterasi maksimal epoh terpenuhi

sementara cukup untuk kali ini, untuk contoh perhitungan manualnya kita lanjutkan pada kesempatan yang akan datang.salam...
Share:

Artificial Neural Network

          Selamat siang pemirsa,mumpung lagi males lihat koding kerjaan siang ini saya coba sempatin buat coretan di sini. Mumpung lagi giat giatnya kerjain skripsi saya yang kebetulan bahas tentang jaringan syaraf tiruan, maka kali ini dan mungkin coretan coretan saya selanjutnya akan membahas tentang jaringan syaraf tiruan beserta jajarannya ( jenis jenis,contoh perhitungan dan kalo sempet sekalian kodingnya juga ).
         Artificial Neural Network atau Jaringan syaraf tiruan merupakan suatu konsep rekayasa pengetahuan dalam bidang kecerdasan buatan uang didesain dengan mengadopsi system saraf manusia, yang pemrosesan utamanya ada diotak. Bagian terkecil dari otak manusia adalah sel syaraf yang disebut unit dasar pemrosesan informasi atau neuron. Ada sekitar 10 miliar neuron dalam otak manusia dan sekitar 60 triliun koneksi (disebut sinaps [synapse]) antar neuron dalam otak manusia ( Shhepred dan Koch, 1990 ). Dengan menggunakan neuron – neuron tersebut secara simultan. Otak manusia dapat memproses informasi secara pararel dan cepat, bahkan lebih cepat dari computer tercepat saat ini. 
         Sebuah neuron terdiri dari atas elemen – elemen berikut : badan sel (disebut soma), sejumlah serat yang menyalurkan informasi ke neuron (disebut dendrit), dan sebuah serat tunggal yang keluar dari neuron (disebut akson). Setiap sinyal luar yang diterima oleh dendrite akan melewati sinaps untuk diteruskan ke neuron, kemudian diproses di dalam soma. Setelah selesai akan dikeluarkan melalui akson untuk di proses kembali oleh neuron yang lain ataupun keluar sebagai sinyal hasil proses di otak.(Prasetyo, 2012)  

     Di atas adalah desain umum dari model Jaringan syaraf tiruan, vector masukan (data dalam data mining) terdiri atas sejumlah nilai yang diberikan sebagai nilai masukan pada ANN. Vektor masukan tersebut mempunyai tiga nilai (x1, x2, x3) sebagai fitur dalam data yang akan dip roses di ANN. Masing – masing nilai masukan melewati sebuah hubungan berbobot w, kemudian semua nilai digabungkan. Nilai gabungan tersebut kemudian diproses oleh fungsi aktivasi untuk menghasilkan sinyal y sebagai keluaran. Fungsi aktivasi menggunakan sebuah nilai ambang batas (threshold) untuk membatasi nilai keluaran agar selalu dalam batas nilai yang ditetapkan. (Prasetyo, 2012)  
       ANN menggunakan fungsi aktivasi yang dipakai untuk membatasi keluaran dari neuron agar sesuai dengan batasan sinyal/nilai keluarannya. Secara umum, ada empat macam fungsi aktifasi yang dipakai diberbagai jenis ANN, yaitu (Prasetyo, 2012)  

Fungsi Aktivasi
1.      Fungsi aktivasi linear
       Fungsi aktivasi ini biasanya digunakan untuk keluaran ANN yang nilai keluarannya diskret. Jika v adalah nilai gabungan dari semua vector oleh penambah, sinyal keluaran y didapatkan dengan memberikan nilai v apa adanya untuk menjadi nilai keluaran. Nilai y diformulasikan dengan (Prasetyo, 2012).

Y = sign(v)
keterangan :
v = hasil perkalian input dan bobot
 

2.      Fungsi aktivasi undak (step)
         Jika v adalah nilai gabungan dari semua vector oleh penambah. Keluaran y didapatkan dengan melakukan pengambang ( thresholding ) pada nilai v berdasarkan nilai T yang diberikan. Nilai y diformulasikan dengan

Bentuk diatas disebut juga threshold bipolar, ada juga yang berbentuk step/threshold biner. Formulasinya seperti berikut (Prasetyo, 2012)

3.  Fungsi aktivasi sigmoid biner 
         ANN dengan nilai keluaran kontinu biasanya menggunakan fungsi aktivasi sigmaoid. Nilai sinyal keluaran, y dihitung fungsi sigmoid kurva sigmoid dengan interval nilai keluaran mulai dari 0 sampai 1. Nilai y diformulasikan dengan 



      Parameter a adalah parameter meniringan ( slope ) pada kurva sigmoid yang dihasilkan. Semakin besar nilai a, semakin tegak kurva yang diberikan, dan semakin kecil nilainya, semakin landai kurva diberikan. Umumnya nilai a yang digunakan adalah 1 sehingga formula yang umum digunakan menjadi.( Prasetyo, 2012)


4.      Fungsi aktivasi sigmoid bipolar
       Fungsi aktivasi ini sebenarnya sama dengan sigmoid biner. Hanya saja batas nilai keluaran yang diberikan adalah -1 sampai 1. Fungsi aktivasi ini sangat baik digunakan untuk proses klasifikasi karena lebih tangguh dalam menangani data – data yang banyak didominasi oleh nilai nol. Nilai y diformulasikan dengan. (Prasetyo, 2012).




Nilai parameter a yang digunakan umumnya 1 sehingga formula di atas berubah menjadi.






Sementara sekian dulu ya coretan tentang gambaran umum Jaringan syaraf tiruan ini. Lain kali saya tambahin buat coretan tentang jenis jenis algoritma JST beserta contoh perhitungannya.Sampai jumpa.

referensi saya dapat dari buku Data mining karangan Bpk Eko Prasetyo yang kebetulan saya pakai untuk isi di BAB 3 skripsi saya.
http://www.bukabuku.com/browses/product/9789792932829/data-mining-konsep-dan-aplikasi-menggunakan-matlab.html

Share:
  • ()
  • ()
Show more

Halaman