Kernel Trick Via Python
Apakah Kernel itu?
Kernel? pada postingan ini saya akan menshare tentang kernel. Kernel yang saya maksud bukanlah kernel pada linux, akan tetapi pada konteks Machine Learning. Ide dasar pada penggunaan kernel pada machine learning adalah jika point negatif dan positif pada dimensi tidak dapat dipisahkan, maka transform fitur tersebut ke () dimana point negatif dan positif dapat dipisahkan. Inti dari kernel trick adalah mentransformasi low-dimensional fitur ke higher-dimensional fitur.
Secara matematik, kernal adalah inner produk dari beberapa fitur map.
Contoh:
Jika kita ingin memprediksi harga smart phone berdasarkan variable:
Dengan linear model kita dapat menuliskan permasalahan diatas menjadi
Namun kita juga dapat memodelkan permasalahan diatas dalam model non linear, contoh: polynominal model
Dimana
adalah kernel, inner produk dari , yang mentransform fitur x dari ke .
Keuntungan dan Kelemahan Kernel Trick
- Keuntungan
- Pemilihan kernel yang tepat akan meningkatkan performa machine learning
- Transformasi low-dimensional fitur ke high-dimensional fitur memungkinkan untuk menyelesaikan permasalahan dengan berbagai model
- Kelemahan
- Semakin besar dimensi suatu fitur maka semakin tinggi resource yang diperlukan dalam komputasi
- Tidak terdapatnya ketentuan yang baku untuk menentukan jenis kernel dan nilai parameter kernel, sehingga untuk mendapatkan performa yang diharapkan trial dan error perlu dilakukan beberapa kali.
Bagaimana Membuat Sebuah Kernel?
Seperti saya jelaskan sebelumnya bahwa kernel adalah inner product dari dua atau lebih fitur map. Untuk membuat sebuah kernel terdapat beberapa langkah
- Definisikan fitur map yang akan memetakan fitur ke .
- Definisikan inner product antara fitur map
- Pastikan bahwa inner product antara fitur map adalah fungsi simetri positif semi-definite.
Contoh:
Untuk fitur dan , definisikan dua fitur map dan . Dimana
Inner product dari dan adalah
Pastikan bahwa adalah fungsi simetri semi-definit. Jika suatu fungsi simetri positif semi-definit, maka fungsi tersebut akan memenuhi beberapa ketentuan berikut:
- k(.) adalah fungsi simetri jika
- Matrix yang dihasilkan oleh fungsi memiliki eigenvalue
Demonstrasi Menggunakan Python
Dalam demonstrasi ini saya akan mendemostrasikan kernel menggunakan phyton. Untuk variabel x dan z
1
2
|
x = np.array([[ 1 , 2 ], [ 2 , 3 ], [ 4 , 5 ]]) z = np.array([[ 8 , 2 ], [ 9 , 3 ], [ 10 , 5 ]]) |
Definisikan fitur map
1
2
3
4
5
|
def phi(x): x1 = np.power(x[ 0 ], 2 ) x2 = pow ( 2 , 1 / 2 ) * x[ 0 ] * x[ 1 ] x3 = np.power(x[ 1 ], 2 ) return np.array([x1, x2, x3]) |
Seperti saya jelaskan sebelumnya, bahwa kernel adalah inner product dari beberapa fitur map, maka kernel
1
|
kXZ = np.inner(phi(x), phi(z)) |
Sampai tahap ini kita telah memiliki kernel fungsi yang merupakan inner product dari dan . Setelah ini kita harus memastikan bahwa kernel fungsi k(.) adalah fungsi simetri semi-definit.
k(.) adalah fungsi simetri
1
2
3
4
|
In[ 1 ]: print (k(z[ 0 , :], x[ 0 , :])) Out[ 1 ]: 144 In[ 2 ]: print (k(x[ 0 , :], z[ 0 , :])) Out[ 2 ]: 144 |
Matrix yang dihasilkan oleh fungsi memiliki eigenvalue
1
2
3
4
5
6
7
8
|
#definisikan variable K dengan nilai matrix 3x3 bernilai 0 K = np.zeros(( 3 , 3 )) #lakukan pengulangan dari 0 sampai 2 for i in range ( 3 ): #lakukan pengulangan dari 0 sampai 2 for h in range ( 3 ): #hitung nilai matrix K (i,h), untuk setiap K(i,h) = k(x_i, x_h) K[i, h] = k(x[i, :], x[h, :]) |
Ok pada potongan kode diatas kita telah berhasil membuat matrix K, dimana . Langkah selanjutnya memastikan bahwa eigenvalue matrix K . Untuk hal ini kita dapat menggunakan fungsi pada numpy np.linalg.eig
1
|
w, v = np.linalg.eig(K) |
Fungsi np.linalg.eig akan menghasilkan duat output, 1: eigenvalues dan 2: eigen vectors.
1
2
|
In[ 3 ]: w Out[ 3 ]: 1870.731 , 0.009 , 4.260 |
Dari perhitungan eigenvalue diatas, bisa kita lihat bahwa seluruh eigenvalue matrix K atau positif.
Apakah Kernel hanya dapat digunakan untuk Support Vector Machine?
Istilah kernel sering dikaitkan dengan algoritma Support Vector Machine (SVM). Namun dalam pengaplikasiaannya, kernel juga dapat diadaptasi terhadap algoritma lainnya seperti Extreme Learning Machine (ELM) dan Regularized Ada-Boost. Untuk info lebih lanjut tentang kernel-trick dapat mengunjungi situs http://www.kernel-machines.org
Referensi
- https://ocw.mit.edu/courses/sloan-school-of-management/15-097-prediction-machine-learning-and-statistics-spring-2012/lecture-notes/MIT15_097S12_lec13.pdf
- https://www.youtube.com/watch?v=3liCbRZPrZA
Disarikan dari https://prasetiautamacv.wordpress.com/2017/03/26/kernel-trick/