Minggu, 03 Mei 2015

Percepton pada kasus Linear dan Non linear

Penulis mencoba menggunakan teknik percepton sebagai teknik klasifikasi secara linear! Cara kerja hampir sama seperti SVM tapi lebih mudah!
 




Persamaan dasarnya adalah 
y = x1*w1+x2*w2+b, if y>=0, then +1
else -1


penulis mempunyai permasalahan berikut
[sebelah kiri] adalah plot data dari
data_input
array([[2, 7],
       [3, 6],
       [2, 2],
       [8, 1],
       [6, 4],
       [4, 8],
       [9, 5],
       [9, 9],
       [9, 4],
       [6, 9],
       [7, 4]])
Dan
data_target
array([[ 1],
       [ 1],
       [ 1],
       [ 1],
       [ 1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1]])
Dengan tanda * merupakan class -1 dan o merupakan class +1



Dengan konsep percepton, bisa didapatkan persamaan berikut
w1 = -9, w2 = -8, bias = 88.5
bila kita menghitung dengan persamaan berikut
y = x1*-9 + x2*-8 + 88.5
menghasilkan
final result
[[ 14.5]
 [ 13.5]
 [ 54.5]
 [  8.5]
 [  2.5]
 [-11.5]
 [-32.5]
 [-64.5]
 [-24.5]
 [-37.5]
 [ -6.5]]
Dengan aturan main y>=0 akan menjadi +1, dan y<0 menjadi -1, maka
final_result = np.where(final_result>=0,+1,-1)
menjadi
final_result
array([[ 1],
       [ 1],
       [ 1],
       [ 1],
       [ 1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1],
       [-1]])

Kemudian pada kasus non linear seperti berikut
Pada logika XOR
Akan ditemui kasus nonlinear

Akan tetapi, kita akan menggunakan konsep hyperplane atau transformasi ke ruang dimensi tinggi yaitu 3D yang dari tadinya 2D.
x1 =x1^2
x2 = sqrt(x1*x2)
x3 = x2^2
kamu bisa melihat bahwa XOR akan di transformasi kedalam ruang dimensi tinggi menghasilkan kasus yang linear!
Konsep tersebut diadopsi dari tricks kernel dari SVM



Contoh Penggunaan Pustaka


import numpy as np
from pustaka_percepton import PustakaPercepton

data_input = np.array([[2,7],[3,6],[2,2],[8,1],[6,4],[4,8],[9,5],[9,9],[9,4],[6,9],[7,4]])
data_target = np.array([[1],[1],[1],[1],[1],[-1],[-1],[-1],[-1],[-1],[-1],])
max_epoch = 100
print 'data input\n',data_input
print 'data target\n',data_target

percepton = PustakaPercepton()
prediksi_target = percepton.pelatihan(data_input,data_target,max_epoch)
print 'bobot\n',percepton.bobot
print 'bias\n',percepton.bias
print 'epoch\n',percepton.epoch
print 'prediksi target \n',prediksi_target


prediksi_target = percepton.pengujian(data_input,percepton.bobot,percepton.bias)
print 'prediksi target \n',prediksi_target


       
 

Menghasilkan

    
data input
[[2 7]
 [3 6]
 [2 2]
 [8 1]
 [6 4]
 [4 8]
 [9 5]
 [9 9]
 [9 4]
 [6 9]
 [7 4]]
data target
[[ 1]
 [ 1]
 [ 1]
 [ 1]
 [ 1]
 [-1]
 [-1]
 [-1]
 [-1]
 [-1]
 [-1]]
bobot
[[-9. -8.]]
bias
88.5
epoch
61
prediksi target 
[[ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]]
prediksi target 
[[ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]
 [-1.]]
 



Pada beberapa kasus diatas, kita dapat menyimpulkan bahwa percepton mampu melakukan klasifikasi nonlinear dengan konsep hyperplane sehingga memenuhi konsep linear pada high dimension R

Penulis menggunakan functional programming yaitu python dan library berupa numpy, matplotlib dalam melakukan penulisan code sebagai solusi alternatif selain matlab

Penulis akui bahwa penggunaan matlab terlalu mendominasi dalam ranah komputasi teknis selain menggunakan scilab, octave, padahal python sudah sangat powerfull! Bahkan kita bisa membuat aplikasi mode GUI menggunakan framework PyQT

Referensi:

The Perceptron (Rosenblatt, 1957) is one of the oldest and simplest Machine Learning algorithms. It’s also trivial to kernelize, which makes it an ideal candidate to gain insights on kernel methods.

http://www.mblondel.org/journal/2010/10/31/kernel-perceptron-in-python/
Posting Komentar