Tampilkan postingan dengan label voted perceptron. Tampilkan semua postingan
Tampilkan postingan dengan label voted perceptron. Tampilkan semua postingan

Minggu, 17 Mei 2015

     Selamat malam pemirsa, jumpa lagi malam ini dengan saya. Mumpung lagi lumayan free hari ini, saya mau lanjutin tulisan saya sebelumnya tentang algoritma voted-perceptron. Kalo kemarin udah bahas tentang algoritma dan contoh perhitungan manualnya, kali ini saya mau lanjutin tentang contoh program sederhana menggunakan bahasa php. Langsung cekidot...

Persiapan Data

     Data yang akan saya pakai kali ini data logika AND yang juga saya pakai di tulisan saya sebelumnya.
$data = array(
array(1,1),
array(1,-1),
array(-1,1),
array(-1,-1)
); // data latih
$label = array(1,-1,-1,-1); // target label data latih

Class voted perceptron

     Pertama kita buat class voted-perceptron yang digunakan untuk implementasi algoritma voted perceptron.

class Voted_perceptron{


}

Pelatihan

     Berikut adalah fungsi yang dibuat untuk melakukan pelatihan data training untuk mendapatkan nilai v, c, dan k.

 function train($data_latih,$label,$max_epoh){ //fungsi pelatihan untuk mencari nilai v,c,dan k
$v = array(array_fill(0,count($data_latih[0]),0));
$k = 0;
$c = array(1);
for($iterasi = 0;$iterasi <= $max_epoh;$iterasi++){
$cek= "";
for($x = 0;$x<count($data_latih);$x++){
$y = $this->dot_product($data_latih[$x],$v[$k]);
if($y ==$label[$x]){
$c[$k] = $c[$k]+1;
$cek .=1;
}else{
$vk = array();
for($a = 0;$a < count($data_latih[$x]);$a++){
$vk[$a] = $v[$k][$a]+($label[$x]*$data_latih[$x][$a]);
}
array_push($v,$vk);
array_push($c,1);
$k = $k + 1;
$cek .=0;
}
}
$ck = strpos($cek,"0");
if($ck===FALSE){
$iterasi = $max_epoh;
}
}
$out = array('v'=>$v,'c'=>$c,'k'=>$k);
return $out;
}
 
Fungsi di atas menghasilkan nilai v,c dan k berupa array. Berikut fungsi dot product yang di gunakan untuk menghitung nilai output.

function dot_product($data,$v){
$y_in = 0;
for($x = 0;$x < count($data);$x++){
$y_in = $y_in + ($data[$x]*$v[$x]);
}
return $this->sign($y_in);
}
 
Dan untuk mendapatkan nilai output berupa 1 atau -1, maka dilakukan perhitungan dengan fungsi aktivasi berikut.

 function sign($y_in){ // aktivasi
if($y_in > 0){
$y = 1;
}else{
$y = -1;
}
return $y;
}
 
dan berikut adalah hasil dari proses training
dan di dapat nilai v = {(0,0),(1,1)}, c = {1,8} dan k = {2}(karena array di mulai dari index 0).

Uji Coba / Klasifikasi

     Untuk proses uji coba saya juga masih menggunakan data logika AND di atas. Dan berikut adalah fungsi klasifikasi

 function classifier($data,$v,$c,$k){ // fungsi untuk klasifikasi
$s = 0;
for($x = 0;$x <= $k;$x++){
$y_in = 0;
$row = 0;
for($y=0;$y<count($v[$x]);$y++){
$y_in = $y_in +($v[$x][$y]*$data[$y]);
$row++;
}
$s = $s +($c[$x]*$this->sign($y_in));
}
return $this->sign($s);
}
 
dan kita lakukan uji coba

$voted = new Voted_perceptron;
$out = $voted->train($data,$label,5); //melakukan proses training
$uji = array(array(-1,-1),array(-1,1),array(1,-1),array(1,1)); //data uji
for($x=0;$x<count($uji);$x++){
$hasil = $voted->classifier($uji[$x],$out['v'],$out['c'],$out['k']); //melakukan klasifikasi
echo "Data ".($x+1)." ";
print_r($uji[$x]);
echo " Hasil : ".$hasil."</br>";
}

hasilnya sebagai berikut
 

dan hasilnya semua data dapat di klasifikasikan dengan benar. 
     Sekian dulu tulisan saya kali ini. Source code bisa di download di sini

Rabu, 13 Mei 2015

      Menyambung tulisan saya sebelumnya tentang voted perceptron, kali ini saya akan memberi contoh perhitungan manual algoritma voted perceptron. algoritma terdiri dari dua tahap yaitu tahap pelatihan atau training dan tahap klasifikasi.

Proses Training

      Berikut ini adalah proses pelatihan untuk mencari nilai vektor perceptron v dan bobot c yang akan digunakan dalam proses klasifikasi. Pada proses pelatihan ini, parameter yang perlu di masukkan adalah vektor perceptron awal v_1 = {0, 0} , Treshold T = 1,k = 1,dan bobot c = 0. Di bawah adalah data logika AND yang akan di gunakan untuk data latih. 

Data yang pertama x = {1, 1} target = 1

kemudian di hitung dot product dari vektor input x dan vektor perceptron v

y_in = (x_1 *v_1)+(x_2 * v_1)
       = (1*0)+(1*0) = 0

dari y_in tersebut di masukkan ke dalam fungsi aktivasi dengan treshold T = 1

y = sign(y_in) = sign(0) = -1

karena target berbeda dengan  output,maka update vektor perceptron

v_2 = v_1 + (target * x)
      = 0 +(1*1) = 1
      = 0+(1*1) = 1

maka di dapat v_2 = {1, 1},update pula nilai c dan k

c_2 = 1
k = 2

sampai di sini kita mendapatkan nilai v = {(0, 0),(1, 1)} dan nilai c = {1,1} dan k - 2 dan kita lanjutkan dengan selanjutnya

 

Data yang kedua x = {1, -1} target = -1 

menghitung output 

y_in = (x_2 *v_2)+(x_2 * v_2)
       = (1*1)+(-1*1) = 0 
y = sign(0) = -1

karena output sama dengan target maka tidak dilakukan perhitungan vektor dan hanya menghitung nilai c

c_2 = c_2 +1
       = 1+1 = 2

sampai di sini kita mendapatkan nilai v = {(0, 0),(1, 1)} dan nilai c = {1,2} dan k - 2 dan kita lanjutkan dengan selanjutnya

 

Data yang ketiga x = {-1, 1} target = -1 

menghitung output 

y_in = (x_2 *v_2)+(x_2 * v_2)
       = (-1*1)+(1*1) = 0 
y = sign(0) = -1

karena output sama dengan target maka tidak dilakukan perhitungan vektor dan hanya menghitung nilai c

c_2 = c_2 +1
       = 2+1 =3

sampai di sini kita mendapatkan nilai v = {(0, 0),(1, 1)} dan nilai c = {1,3} dan k - 2 dan kita lanjutkan dengan selanjutnya

 

Data yang ke empat x = {-1, -1} target = -1 

menghitung output 

y_in = (x_2 *v_2)+(x_2 * v_2)
       = (-1*1)+(-1*1) =-2
y = sign(-2) = -1

karena output sama dengan target maka tidak dilakukan perhitungan vektor dan hanya menghitung nilai c

c_2 = c_2 +1
       = 3+1 =4

sampai di sini kita mendapatkan nilai v = {(0, 0),(1, 1)} dan nilai c = {1,4} dan k - 2 .
Apabila dalam satu iterasi masih ada data yang error,maka di lanjut ke iterasi berikutnya sampai di peroleh vektor yang selalu benar untuk semua data. Berikut adalah rangkuman dari perhitungan pelatihan voted perceptron.

dari pelatihan tersebut diperoleh nilai v = {(0, 0),(1, 1)},c = {1,8} dan k = 2 yang di gunakan dalam proses klasifikasi.

Proses Klasifikasi

       Dari nilai v,c, dan k dari proses pelatihan maka kita lakukan klasifikasi. Data yang akan kita uji adalah x = {1, 1}

a = (1*sign((0*1)+(0*1)))+(8*sign((1*1)+(1*1)))
a = -1 +8
a = 7
output = sign(7) = 1 

dan data dapat di klasifikasikan dengan tepat.

Sekian dulu tulisan ini. Bila masih ada waktu, lain kesempatan saya lanjutkan dengan contoh program sederhana dari algoritma voted perceptron. Sampai jumpa.

Apabila ada kesalahan dalam penulisan atau perhitungan monggo di ingatkan. Terima kasih.