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
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
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