Klasifikasi menggunakan SVM

By | November 30, 2021
8,849 Views

Klasifikasi menggunakan SVM – SVM adalah algoritma supervisi untuk melakukan klasifikasi baik linear maupun nonlinear tergantung pada margin maksimalisasi diantara titik suporrt, mapping data dapat ditransformasi kedalam dimensi yang lebih tinggi. SVM dibangun oleh Vapnik dan Cortes pada 1992, SVM telah sukses diaplikasikan kebanyak kasus seperti pengenalan tulisan tangan, prediksi runtun waktu, pengenalan suara.

Pada tulisan ini akan diberikan mengenai Apa itu SVM, Cara training SVM, Mengukur kinerja nya, Prediksi hasil klasifikasi dengan menggunakan data asing (data yang belum pernah digunakan untuk pelatihan). Karena tulisan ini agak cukup panjang, siapkan waktu yang cukup!

Apa itu Support Vector Machine

Sebelum melangkah lebih jauh, kalian bisa pelajari fundamental SVM melalui persamaan matematika yang saya bahas disini Fundamental SVM. Disitu dijelaskan mengenai dasar perhitungan SVM menggunakan QP – Quadratic Programming.

Jenis Data

Secara umum jenis data yang akan kita temua ada 2 linear dan non linear seperti gambaran berikut

Linear

Sesuai dengan namanya garis lurus akan tampak dapat dipisahkan hanya dengan sebuah garis lurus untuk membatasi 2 class/kategori

data linear

Untuk kasus linear sangat mudah untuk menemukan margin/pembatas seperti berikut

Data Non Linear

Merupakan salah satu jenis data yang sering kita temui dalam dunia nyata, data ini tercipta atas persamaan polinomial

data non linear

 

Sedangkan untuk kasus nonlinear, kita butuh teknik hyperplane yaitu transformasi ke dimensi lebih tinggi lagi atau disebut dengan orde R

See also  Mengoptimalkan Performa Model Machine Learning: Panduan Praktis Split Dataset untuk Training, Testing, dan Validation

 

Inti dari SVM adalah mencoba untuk mencari separating hyperplane alias pembatas secara linear (yang non linear harus dibikin linear dulu)

Tools yang digunakan

Ada banyak tools untuk melakukan mencoba SVM, anda bisa menggunakan matlab dengan function svmclassify ataupun Python dengan pustaka sklearn. Terserah anda karena semua punya kelebihan masing-masing.  Disini saya menggunakan Python saja biar lebih mudah, kalau untuk matlab, kalian bisa baca disini Support Vector Machine di Matlab

Persiapan Pustaka/Library

Library yang digunakan yaitu

  1. Numpy untuk mengolah matrix
  2. Pandas untuk membaca data struktur
  3. Matplotlib untuk visualisasi plot
  4. Sklearn untuk machine learningnya

Juga kita menggunakan Spyder untuk Editornya, cara install semua package, bisa baca buku disini, Buku Belajar Mudah Python dengan Package Open Source

Persiapan Data Linear

Karena penulis suka menggunakan Python, silahkan bagi anda install terlebih dahulu. Siapkan data dalam bentuk excel disimpan dengan nama data linear.xlsx

Visualisasi data dan Implementasi SVM Linear

Data yang digunakan bersifat linear, sehingga persamaan rumus matematikanya seperti berikut

    \[y=a*x+b\]

sebagai fungsi linear 2 dimensi.

Bila sudah siap, kita akan langsung saja melakukan ploting

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn import svm

data1 = pd.read_excel('data linear.xlsx')
x1 = data1['p1']
x2 = data1['p2']
x_training = np.array(list(zip(x1,x2)))
y_training = data1['t']

nama_kelas = ['-1','+1']

i_plus = y_training[y_training>0].index
i_min = y_training[y_training<0].index


plt.figure()
plt.scatter(x_training[i_min,0],x_training[i_min,1],c='b',s=100)
plt.scatter(x_training[i_plus,0],x_training[i_plus,1],c='r',s=100)
plt.legend(nama_kelas)
plt.title('Kasus Linear')

Sengaja saya berikan warna biru untuk minus dan merah untuk plus, Hasilnya seperti berikut

Tugas dari SVM adalah mencari nilai a dan b dari sebuah function linear tersebut diatas. Kita akan menggunakan library sklearn yaitu SVC yang merupakan C-Support Vector Classification berupa implementasi dari library libsvm. Kita lanjut code-nya dengan berikut

svc = svm.SVC(kernel='linear').fit(x_training,y_training)
weight = svc.coef_
intercept = svc.intercept_
a = -weight[0,0] / weight[0,1]
b = -intercept[0]/weight[0,1]
print('y = '+str(a)+' * x + '+str(b)) #fungsi linear

menghasilkan

y = -1.56974382329 * x + 9.95470962319

Sesuai dengan jenis kernel=’linear’. Kita tambahkan code lagi, untuk visualisasi separating line nya, kita coba membuat rentang nilai sumbu x dari 2 sampai 3.8 dengan increment 0.1 seperti berikut

x_coba = np.arange(2,3.8,0.1)
y_coba = np.multiply(a,x_coba)+b #penerapan fungsi linear

plt.plot(x_coba,y_coba)

Menghasilkan garis biru ditengah sebagai pemisah antara plus dan minus nya.

See also  Teknologi Pengenalan Tulisan - OCR dengan Deep Learning PyTorch

Melakukan Prediksi Data asing dengan SVM

Bagaimana penggunanan SVM untuk melakukan prediksi data? Misalkan kita mempunyai data berikut

Bila kita plotkan berikut

Terlihat bahwa data asing terletak di area plus, untuk mengujinya cukup gunakan predict()

x_asing = np.array([[3,6]])
print svc.predict(x_asing)

menghasilkan

[1]

Sudah tepat SVM melakukan prediksi data asing yaitu kategori kelas plus

Score SVM

Agar tampak lebih meyakinkan, kita melihat score nya dengan score() dengan score 0.0 –  1 seperti berikut

print svc.score(x_training,y_training)

menghasilkan

1.0

Sehingga dikatakan bahwa SVM melakukan tugasnya 100%. Tulisan akan disambung lagi untuk kasus data non linear yang sering kita jumpai dikehidupan sehari-hari, tapi dengan contoh kasus sederhana terlebih dahulu, ikuti saja serialnya di www.softscients.com

Link Pembahasan Mengenai SVM

Demikian pembahasan mengenai Klasifikasi menggunakan SVM, bila ada yang kurang jelas, silahkan untuk comment dibawah ini disertai nama dan alamat email