A. Pengertian
B. Cara Kerja SVR
Melalui gambar di atas kita dapat melihat ada 3 garis sejajar diagonal dari kiri bawah menuju kanan atas. Saya akan membaginya menjadi 3 garis:
Garis paling atas (garis putus-putus) adalah garis batas +, artinya garis ini merupakan garis yang melewati/melalui poin (satu data poin) yang menjadi bagian dari kluster +. Titik-titik (data points) ini sering disebut juga dengan istilah support vectors. Titik yang dilewati garis ini adalah titik terluar dari kluster + sekaligus menjadi batas bagi kluster +. Jarak antara garis ini dengan garis tengah haruslah tegak lurus (perpendicular).
Garis tengah adalah garis pembatas antara kedua zona (+ dan -), yang dalam SVM disebut dengan istilah hyperplane atau separating plane/line. Garis ini memisahkan dua kluster, yaitu klaster + dan -. Atau bisa saja kita sebut dengan kluster A dan B, 1 dan 2, dan seterusnya (penamaan bebas, namun konvensi umum menggunakan + dan -).Garis paling bawah (garis putus-putus) adalah garis batas -, artinya garis ini merupakan garis yang memiliki melewati satu data poin yang menjadi bagian dari kluster -. Penjelasannya sama dengan garis batas +.
Perlu diingat bahwa jarak antara garis paling atas dengan garis tengah, adalah sama dengan jarak antara garis paling bawah dengan garis tengah. Jarak ini kita sebut dengan epsilon dengan simbol ε. Inti dari gambar di atas (kita bahas konsep SVM dulu secara umum agar mudah memahami SVR nantinya), adalah bagaimana agar bisa membagi dua zona (dua kluster) dengan sebisa mungkin memaksimalkan jarak epsilon (ε) nya, sehingga didapat sebuah pembagian yang paling optimal. Pembagian optimal itu seperti apa? Adalah didapat dua zona yang semua data poin masuk ke dalam salah satu dari dua zona ini, dengan tingkat kepastian yang presisi (jarak epsilon paling besar).
Jadi bisa dipahami ya apa itu SVM : Sebagai ringkasan, SVM adalah sebuah cara membagi sebuah dataset ke dalam 2 jenis dataset dengan menggunakan sebuah hyperplane. Lalu apa bedanya dengan SVR? Jika SVM itu tujuannya membagi dataset (klasifikasi) ke dalam 2 zona, maka SVR sebaliknya, yaitu bagaimana caranya agar semua dataset masuk ke dalam satu zona, dengan tetap meminimasi nilai epsilon (ε).
SVM membagi menjadi dua, SVR memasukkan semuanya menjadi satu. M
Sekarang mari kita bahas langkah-langkah menggunakan SVR:
- Menyiapkan training set
- Memilih kernel dan parameternya serta regularisasinya (regularization)
- Membuat korelasi matriks
- Melatih modelnya untuk mendapatkan koefisien
- Gunakan koefisien di atas, kemudian buat estimatornya
Barangkali ada sebagian yang melihat langkah-langkah di atas terlalu rumit, karena ada proses kalkulasi yang melibatkan vektor. Selain itu ada juga istilah kernel, yang merupakan sebuah istilah yang menjelaskan tentang cara merubah data dari dua dimensi menjadi multi dimensi. Ada beberapa kernel yang populer dipakai di ML yaitu kernel linear, polinomial, radial basis function atau gaussian, dan sigmoid. Tenang saja, tidak perlu mengerti semuanya saat ini. Semua ini akan menjadi sangat mudah ketika mencobanya memecahkan sebuah contoh nyata.
C. Contoh Kasus
Kali ini kita akan melakukan sebuah prediksi regresi menggunakan SVR. Kasusnya sama persis dengan kasus gaji di pembahasan regresi polinomial. Secara ringkas, perusahaan ingin mencari tahu apakah calon pegawai jujur atau tidak tentang gaji yang ia sampaikan di perusahaan sebelumnya tempat ia bekerja.
Bahasa Python
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | # Mengimpor library import numpy as np import matplotlib.pyplot as plt import pandas as pd # Mengimpor dataset dataset = pd.read_csv( 'Posisi_gaji.csv' ) X = dataset.iloc[:, 1 : 2 ].values y = dataset.iloc[:, 2 : 3 ].values # Feature Scaling from sklearn.preprocessing import StandardScaler sc_X = StandardScaler() sc_y = StandardScaler() X = sc_X.fit_transform(X) y = sc_y.fit_transform(y) # Fitting SVR ke dataset from sklearn.svm import SVR regressor = SVR(kernel = 'rbf' ) regressor.fit(X, y) # Visualisasi hasil SVR plt.scatter(X, y, color = 'red' ) plt.plot(X, regressor.predict(X), color = 'blue' ) plt.title( 'Jujur atau tidak (SVR)' ) plt.xlabel( 'Tingkat posisi' ) plt.ylabel( 'Gaji' ) plt.show() # Memprediksi hasil # y_pred = regressor.predict(6.5) # y_pred = regressor.predict(sc_X.transform(6.5)) # y_pred = regressor.predict(sc_X.transform(np.array([[6.5]]))) y_pred = sc_y.inverse_transform(regressor.predict(sc_X.transform(np.array([[ 6.5 ]])))) # Visualisasi hasi SVR (resolusi tinggi dan kurva yang lebih halus) X_grid = np.arange( min (X), max (X), 0.01 ) # Pilih 0.01 dan bukan 0.1, karena datanya sudah melalui feature scaling X_grid = X_grid.reshape(( len (X_grid), 1 )) plt.scatter(X, y, color = 'red' ) plt.plot(X_grid, regressor.predict(X_grid), color = 'blue' ) plt.title( 'Jujur atau tidak (SVR)' ) plt.xlabel( 'Tingkat posisi' ) plt.ylabel( 'Gaji' ) plt.show() |
Penjelasan:
- Line 2 sampai 4 mengimpor library apa saja yang diperlukan
- Line 7 sampai 9 mengimpor datasetnya
- Line 12 mengimpor library untuk feature scaling. Mengapa kita melakukan feature scaling? Karena perbedaan antara gaji (satuannya jutaan) dengan level bekerja sangatlah jauh, sehingga jika dibuat grafiknya nantinya hanya akan terlihat garis lurus saja. Oleh karena itu feature scaling (FS) menyamakan satuannya sehingga mudah untuk divisualisasikan dan diinterpretasikan.
- Perlu juga diingat alasan mengapa kita membutuhkan FS. Library ML lainya seperti regresi linear dan regresi polinomial sudah memiliki fitur FS di dalamnya, sehingga tidka perlu melakukan FS lagi. Namun library SVM tidak memiliki fitur FS, sehingga kali ini kita perlu melakukan FS.
- Line 13 adalah mempersiapkan feature scaling untuk variabel X
- Line 14 adalah mempersiapkan feature scaling untuk variabel y
- Line 15 adalah proses melakukan FS kepada variabel X
- Line 16 adalah proses melakukan FS kepada variabel y
- Line 19 mengimpor sub library SVR dari library SVM
- Line 20 mempersiapkan model SVR dengan menggunakan kernel gaussian alias RBF (radial basis function). Mengapa memilih kernel ini? Pertama, kernel ini adalah kernel default dan paling umum dipakai. Kedua, kernel ini juga cocok untuk data non linear.
- Line 21 membuat model SVR kita dari dataset kita (training set)
- Line 24 sampai 29 adalah untuk melihat visualisasi dari model SVR kita.
- Grafiknya tampak sebagai berikut