Modifikasi Kernel Function di SVM

By | January 15, 2021
Print Friendly, PDF & Email
2,702 Views

Sinopsis

Melanjutkan pembahasan Support Vector Machine menggunakan function built in di Matlab yaitu fitsvm, tentu kalian tahu apakah kernel function nya bisa diubah? Modifikasi Kernel Function di SVM sangat memungkinkan walaupun function fitsvm di matlab secara default sudah mempunyai 3 jenis kernel yang bisa kalian gunakan yaitu linear, radial basis / gaussian, dan yang terakhir polynomial dengan rumus umum sebagai berikut

 

Bila kalian gunakan fitsvm tanpa menyebutkan kernel function maka secara default akan menggunakan kernel linear. Sebelumnya kalian harus tahu apa itu function bsxfun dan handle function. Kalian perhatikan variabel A berikut

A =
     1     2     4
     3     4     4
     1     1     1

Handle function @minus untuk kegiatan operasi minus(A,mean(A)) akan menghasilkan berikut

>> minus(A,mean(A))
ans =
   -0.6667   -0.3333    1.0000
    1.3333    1.6667    1.0000
   -0.6667   -1.3333   -2.0000

Nah function untuk kegiatan operasi diatas di matlab menggunakan bsxfun(x) seperti kode berikut

A = [1 2 4; 3 4 4; 1 1 1];
C = bsxfun(@minus, A, mean(A))

hasilnya

C =
   -0.6667   -0.3333    1.0000
    1.3333    1.6667    1.0000
   -0.6667   -1.3333   -2.0000

Kalau kalian gunakan perintah C = bsxfun(@plus,A,B) artinya adalah A+B, misalkan untuk sesama variable A yaitu bsxfun(@plus,A,A) artinya A+A

ans =
     2     4     8
     6     8     8
     2     2     2

Kalian bisa menggunakan beragam operasi aritmatika sesuai dengan tabel dibawah ini

Membuat Kernel Radial Basis Function dengan bsxfun

Nah untuk menulis persamaan RBF dengan bsxfun dengan rumus umum RBF yaitu

    \[K(x1,x2)=exp(-\frac{||x_1-x_2||^2}{2\sigma^2})\]

K = bsxfun(@plus, sum(x1.^2,2), sum(x2.^2,2).')- 2*(x1*x2')

K = exp(-K ./ (2*sigma^2));

Anggap saja nilai Sigma = 1, mari kita coba dengan data berikut

x1 = [1;0;1;0]
x2 = [1;1;0;0]
sigma = 1
K = bsxfun(@plus, sum(x1.^2,2), sum(x2.^2,2).')- 2*(x1*x2');
K = exp(-K ./ (2*sigma^2))

hasil

x1 =
     1
     0
     1
     0
x2 =
     1
     1
     0
     0
sigma =
     1
K =
    1.0000    1.0000    0.6065    0.6065
    0.6065    0.6065    1.0000    1.0000
    1.0000    1.0000    0.6065    0.6065
    0.6065    0.6065    1.0000    1.0000

Kernel Function Radial Basis Function /Gaussian

Sekarang kalian buat saja kode diatas menjadi sebuah function, misalkan kita beri nama myrbf.m

function K = myrbf(U, V)
    sigma = 1;
    K = bsxfun(@plus, sum(U.^2,2), sum(V.^2,2).') - 2*(U*V');
    K = exp(-K ./ (2*sigma^2));
end

Dataset XOR

Dataset non linear yang akan kita gunakan XOR agar kalian lebih mudah pelajari, ok langsung saja kita coba SVM dengan modifikasi kernel function

clc;clear all;close all;
x2=[1,0,1,0];
x1=[1,1,0,0];
y=[1,-1,-1,1];
disp('dataset')
data = array2table(transpose([x1;x2;y]),'variablenames',{'x1','x2','y'});
disp(data);
X = [data.x1,data.x2];
 
model2 = fitcsvm(X,transpose(y),'KernelFunction','myrbf');
hasil = predict(model2,X);
hasil_akhir = array2table([data.y,hasil],'variablenames',{'target','prediksi'});
disp('Target dan Prediksi')
disp(hasil_akhir);

hasil

dataset
    x1    x2    y 
    __    __    __
    1     1      1
    1     0     -1
    0     1     -1
    0     0      1
Target dan Prediksi
    target    prediksi
    ______    ________
       1          1   
      -1         -1   
      -1         -1   
       1          1

Sip sesuai dengan hasil tepat sekali

Model Umum Kernel Function

Bagaimana dengan kernel function yang lainnya? Hal yang harus kalian ketahuai bahwa untuk modifikasi kernel function harus mengikuti model umum berikut ini

function [K] = myfunction(U,V)
 %your statement
end

Kernel Function Linear

Misalkan untuk kernel function bersifat linear dengan persamaan umum

    \[K(x1,x2)=x_1^T*x_2\]

kita bisa ubah menjadi

    \[K(x1,x2)=x_1*x_2^T\]

Ubah menjadi kode function di matlab disimpan dengan mylinear.m

function [K] = mylinear(x1,x2)
    K = x1*x2';
end

Kernel Function Polynomial

Sedangkan untuk kernel function bersifat polynomial dengan persamaan umum

    \[K(x1,x2)=(x_1^T*x_2+1)^{\gamma}\]

kita bisa ubah menjadi

    \[K(x1,x2)=(x_1*x_2^T)^{\gamma}\]

Ubah menjadi kode function di matlab disimpan dengan mypolynomial.m

function [K]=mypolynomial(x1,x2)
   p = 1.5;
   K = (x1*x2'+1).^p
end

Kernel function Sigmoid / Tangen

Sedangkan untuk kernel function bersifat sigmoid dengan persamaan umum

    \[K(x1,x2)=tanh(\beta_0x_1^T*x_2+\beta_1)\]

kita bisa ubah menjadi

    \[K(x1,x2)=tanh(\beta_0x_1*x_2^T+\beta_1)\]

Ubah menjadi kode function di matlab disimpan dengan mysigmoid.m

function K = mysigmoid(x1,x2)
    beta_0 = 1;
    beta_1 = -1;
    K = tanh(beta_0*x1*x2' + beta_1);
end

Ada banyak sekali jenis kernel function kalian bisa ref: https://www.softscients.web.id/2019/05/kernel-function-to-machine-learning.html tapi kalian harus hati-hati penggunaanya karena kalau salah akan menampilkan error di pada saat memanggil perintah fitsvm() seperti berikut

Error using solve
Kernel function returns kernel product of incorrect size.

Demikian pembahasan mengenai Modifikasi Kernel Function di SVM-Support Vector Machine yang bisa kalian pelajari dan gunakan untuk riset.

Leave a Reply