LIBSVM – A Library for Support Vector Machines di GNU Octave

By | July 30, 2024
1,998 Views

SVM di GNU Octave – Algoritma SVM – Support Vector Machine secara luas telah banyak digunakan untuk machine learning karena sangat robust dalam melakukan klasifikasi non linear sesuai dengan jenis kernel yang digunakan tentunya.

Pembahasan mengenai SVM telah saya tuliskan di website ini baik itungan manual ataupun menggunakan library khsusus. Bagi pengguna Matlab untuk SVM sudah ada secara built in, tapi terkait lisensi Matlab yang cukup mahal (harga sekitar 30 jutaan) maka pilihan untuk membeli lisensi untuk penggunaan pribadi cukup memberatkan sehingga banyak penggunan mencoba untuk beralih menggunakan GNU Octave.

Nah kalian yang pengguna GNU Octave, untuk Library SVM di GNU Octave bisa kalian peroleh disini yaitu LIBSVM — A Library for Support Vector Machines. Berita baiknya bagi penggunan Octave bisa menggunakan library tersebut, caranya sangat mudah koq, kalian download saja disini

Kompilasi source code menjadi mex

Kode LIBSVM — A Library for Support Vector Machines yang ada digithub tersebut ditulis menggunakan bahasa C sehingga kita akan melakukan kompilasi menjadi *.mex.

Didalam github tersebut ada folder matlab

Diatas ada file dengan nama make.m yang berguna untuk melakukan kompilasi dari *.c menjadi *.mex; Caranya sangat mudah setelah kalian download semua kodenya, misalkan saja saya letakan di E:\svm\libsvm-master\matlab

Kalian buka GNU Octave dan arahkan work directory nya sesuai dengan alamat diatas. Pastikan sudah betul pwd nya

>> pwd
ans = E:\svm\libsvm-master\matlab
>>

Langsung saja ketikan make pada command window untuk melakukan kompilasi LIBSVM — A Library for Support Vector Machines di GNU Octave. Kalian bisa cek file *.mex yang terbentuk

Untuk memastikan bahwa SVM bekerja dengan baik, maka gunakan perintah berikut pada command window

See also  Metode Newton-Raphson

svmtrain

Bila menghasilkan output berikut

>> svmtrain
Usage: model = svmtrain(training_label_vector, training_instance_matrix, 'libsvm_options');
libsvm_options:
-s svm_type : set type of SVM (default 0)
        0 -- C-SVC              (multi-class classification)
        1 -- nu-SVC             (multi-class classification)
        2 -- one-class SVM
        3 -- epsilon-SVR        (regression)
        4 -- nu-SVR             (regression)
-t kernel_type : set type of kernel function (default 2)
        0 -- linear: u'*v
        1 -- polynomial: (gamma*u'*v + coef0)^degree
        2 -- radial basis function: exp(-gamma*|u-v|^2)
        3 -- sigmoid: tanh(gamma*u'*v + coef0)
        4 -- precomputed kernel (kernel values in training_instance_matrix)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1
(default 0)
-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
-v n: n-fold cross validation mode
-q : quiet mode

Selamat, maka kalian telah berhasil melakukan kompilasi, jangan lupa biar bisa dipanggil secara global, kalian harus addpath(), sesuai dengan lokasi diatas, cukup ketikan berikut

addpath(pwd())

Kita cek, apakah sudah berhasil di addpath(), gunakan perintah berikut

path()

hasilnya sebagai berikut, kalian bisa melihat pada baris 2 telah dimasukan kedalam global function

.
E:\svm\libsvm-master\matlab
C:\Octave\OCTAVE~1.0\mingw64\lib\octave\5.1.0\site\oct\x86_64-w64-mingw32
C:\Octave\OCTAVE~1.0\mingw64\lib\octave\site\oct\api-v53\x86_64-w64-mingw32
C:\Octave\OCTAVE~1.0\mingw64\lib\octave\site\oct\x86_64-w64-mingw32
C:\Octave\OCTAVE~1.0\mingw64\share\octave\5.1.0\site\m
C:\Octave\OCTAVE~1.0\mingw64\share\octave\site\api-v53

Nah sekarang LIBSVM – A Library for Support Vector Machines telah siap digunakan di Octave. Cara penggunaanya bagaimana? Kalian bisa baca ini

See also  Belajar Algoritma Genetika menggunakan GNU Octave Bagian 2

Misalkan kita akan melakukan klasifikasi biner XOR dengan kernel radial

label =[-1;1;1;-1];
mat = [1,1; 1,0; 0,1; 0,0];
model = svmtrain(mat,label,'-t 2')

hasilnya

model =

  scalar structure containing the fields:

    Parameters =

       0
       2
       3
       1
       0

    nr_class =  2
    totalSV =  4
    rho = 0
    Label =

       1
       0

    sv_indices =

       1
       2
       3
       4

    ProbA = [](0x0)
    ProbB = [](0x0)
    nSV =

       2
       2

    sv_coef =

       1
       1
      -1
      -1

    SVs =

Compressed Column Sparse (rows = 4, cols = 1, nnz = 4 [100%])

  (1, 1) -> -1
  (2, 1) ->  1
  (3, 1) ->  1
  (4, 1) -> -1

SVM berhasil melakukan klasifikasi XOR, namun ketika dilakukan SVMPredict hasilnya kurang memuaskan! Terpaksa saya menggunakan https://upscfever.com/upsc-fever/en/data/en-exercises-21.html saja nampaknya akan lebih bagus.

Saya akan test menggunakan logika XOR karena sifatnya non linear

clc;clear all;close all;
#logika boolean XOR

X = [1,1; 1,0; 0,1; 0,0]
y = [1;0;0;1];

figure,
scatter(X(y==1,1),X(y==1,2),500,'fill');
hold on;
scatter(X(y==-1,1),X(y==-1,2),500,'fill');
hold off;


C = 1;
model = svmTrain(X, y, C, @gaussianKernel, 1e-3, 20)

prediksi = svmPredict(model,X)

hasil

>> model
model =

  scalar structure containing the fields:

    X =

       1   1
       1   0
       0   1
       0   0

    y =

       1
      -1
      -1
       1

    kernelFunction = @gaussianKernel
    b =  0.00097656
    alphas =

       1
       1
       1
       1

    w =

       0
       0

Prediksi Sip OK

>> prediksi
prediksi =

   1
   0
   0
   1

Lebih lanjut, kalian baca saja disini