Support Vector Machine (SVM) merupakan salah satu algoritma machine learning terawasi (supervised learning) yang paling andal dan banyak digunakan, khususnya untuk menyelesaikan masalah klasifikasi dan regresi. SVM secara matematis dirancang untuk menemukan hyperplane atau bidang pemisah optimal yang memaksimalkan margin antar kelas, sehingga memungkinkan model melakukan prediksi terhadap data baru dengan akurasi yang tinggi.
Salah satu keunggulan utama SVM adalah kemampuannya dalam menangani data berdimensi tinggi, seperti data citra, teks, maupun genomik. Algoritma ini juga fleksibel, karena dapat diterapkan baik pada klasifikasi biner maupun multi-kelas. Bahkan ketika data tidak dapat dipisahkan secara linier, SVM tetap dapat memisahkan kelas dengan efektif melalui pendekatan kernel trick, yakni dengan memetakan data ke ruang berdimensi lebih tinggi agar batas pemisah optimal dapat ditemukan.
Popularitas SVM tidak hanya didorong oleh kinerjanya yang konsisten di berbagai bidang, tetapi juga oleh fondasi teoritis yang kuat serta formulasi matematis yang elegan. Artikel ini akan mengulas SVM secara komprehensif—mulai dari konsep dasar, sejarah, hingga penerapannya di dunia nyata—dengan gaya penulisan yang human-friendly, sehingga dapat diakses oleh pembaca dari berbagai latar belakang, baik akademik maupun praktisi.
Support Vector Machine pertama kali diperkenalkan oleh Vladimir Vapnik dan timnya pada awal 1990-an sebagai bagian dari pengembangan teori statistical learning. Salah satu publikasi penting yang menandai lahirnya algoritma ini adalah makalah berjudul “Support Vector Method for Function Approximation, Regression Estimation, and Signal Processing” yang diterbitkan pada tahun 1995.
Awalnya, SVM dikembangkan untuk menyelesaikan masalah klasifikasi linier. Namun, seiring waktu, algoritma ini mengalami kemajuan signifikan, terutama setelah diperkenalkannya konsep kernel trick—sebuah metode yang memungkinkan SVM melakukan klasifikasi pada data nonlinier secara efisien dengan memproyeksikan data ke ruang fitur berdimensi lebih tinggi.
Support Vector Machine (SVM) merupakan algoritma pembelajaran mesin terawasi (supervised learning) yang dirancang untuk menangani permasalahan klasifikasi maupun regresi. Dikembangkan oleh Vapnik dan Cortes pada tahun 1995, inti dari pendekatan SVM terletak pada pencarian hyperplane optimal, yaitu bidang pemisah yang secara efektif memisahkan dua kelas data dengan margin maksimum (maximum margin).
Margin ini mengacu pada jarak antara hyperplane dengan titik data terdekat dari masing-masing kelas, yang dikenal sebagai support vectors. Semakin besar margin yang dapat dicapai, semakin baik kemampuan model dalam melakukan generalisasi terhadap data baru yang belum pernah ditemui sebelumnya.
Tujuan utama dari SVM adalah untuk menemukan hyperplane terbaik yang tidak hanya dapat memisahkan dua kelas secara tepat, tetapi juga memaksimalkan jarak antar kelas. Pendekatan ini secara teoritis dan empiris terbukti efektif dalam mengurangi risiko overfitting serta meningkatkan akurasi prediksi, terutama saat model dihadapkan pada data uji yang bersifat kompleks atau tidak terstruktur.
Support Vector Machine (SVM) dibangun dari sejumlah konsep fundamental yang bekerja secara sinergis untuk menghasilkan model klasifikasi atau regresi yang kuat. Komponen-komponen utama tersebut dijelaskan sebagai berikut:
Hyperplane
Hyperplane adalah garis atau bidang keputusan yang digunakan untuk memisahkan dua kelas data. Dalam ruang dua dimensi, hyperplane berbentuk garis lurus; sementara dalam dimensi yang lebih tinggi, bentuknya dapat berupa bidang atau bahkan manifold. Hyperplane optimal adalah yang memaksimalkan margin pemisahan antara kelas.
Margin
Margin adalah jarak antara hyperplane dengan titik data terdekat dari masing-masing kelas. SVM berusaha memaksimalkan margin ini agar pemisahan antar kelas menjadi lebih stabil dan tahan terhadap gangguan seperti noise atau outlier.
Support Vectors
Support vectors adalah titik-titik data yang berada paling dekat dengan hyperplane. Titik-titik inilah yang paling berpengaruh dalam menentukan posisi dan orientasi hyperplane. Meskipun data pelatihan dapat berjumlah banyak, hanya support vectors yang benar-benar menentukan struktur model akhir.
Kernel
Dalam kasus data yang tidak dapat dipisahkan secara linier di ruang aslinya, SVM memanfaatkan pendekatan kernel trick untuk memetakan data ke ruang berdimensi lebih tinggi, di mana pemisahan linier menjadi mungkin. Beberapa fungsi kernel yang umum digunakan antara lain:
Hard Margin vs Soft Margin
Parameter C
Parameter C mengontrol kompromi antara memaksimalkan margin dan meminimalkan kesalahan klasifikasi. Nilai C yang besar cenderung menghasilkan hyperplane yang berusaha meminimalkan kesalahan sekecil mungkin, tetapi berisiko overfitting. Sebaliknya, nilai C yang kecil memberikan toleransi terhadap kesalahan, memungkinkan margin yang lebih besar dan generalisasi yang lebih baik.
Hinge Loss
Hinge loss adalah fungsi kerugian khas yang digunakan dalam SVM. Fungsi ini hanya menghukum prediksi yang salah atau terlalu dekat dengan margin, menjadikan SVM efisien dalam mengatasi data kompleks dengan klasifikasi yang tajam dan selektif.
Untuk memberikan pemahaman lebih lanjut, berikut adalah visualisasi interaktif yang menunjukkan hyperplane, margin, dan support vectors pada data dua dimensi yang dapat dipisahkan secara linier:
library(e1071)
## Warning: package 'e1071' was built under R version 4.4.2
# Simulasi data 2 kelas yang dapat dipisahkan secara linier
set.seed(260626)
x1 <- matrix(rnorm(20*2), ncol=2)
x2 <- matrix(rnorm(20*2)+3, ncol=2)
x <- rbind(x1, x2)
y <- as.factor(c(rep(1,20), rep(2,20)))
data_svm <- data.frame(x=x, y=y)
# Fit SVM model linier
model_lin <- svm(y ~ ., data=data_svm, kernel="linear", cost=1, scale=FALSE)
# Visualisasi dengan support vector
plot(model_lin, data_svm, main="SVM Linear: Margin & Support Vectors")
Gambar ini memperlihatkan batas pemisah (hyperplane), dua margin, serta titik-titik support vector yang berada paling dekat dengan hyperplane. Visualisasi ini membantu menjelaskan bagaimana SVM bekerja dalam ruang fitur dua dimensi dan bagaimana margin serta support vectors memainkan peran penting dalam konstruksi model.
Fungsi kernel merupakan komponen krusial dalam algoritma SVM, terutama dalam menangani data yang tidak dapat dipisahkan secara linier. Fungsi ini memungkinkan SVM untuk membentuk hyperplane pemisah di ruang fitur berdimensi tinggi tanpa perlu secara eksplisit menghitung transformasi tersebut—teknik ini dikenal sebagai kernel trick. Melalui pendekatan ini, SVM dapat mengatasi berbagai pola non-linier secara efisien dan efektif.
Berikut adalah beberapa jenis kernel yang umum digunakan dalam praktik:
Linear Kernel
Digunakan ketika data dapat dipisahkan secara linier. Kernel ini sederhana dan cepat, serta cocok untuk kasus dengan banyak fitur namun relasi antar fitur relatif linier.
Polynomial Kernel
Cocok untuk data yang memiliki hubungan non-linier. Kernel ini memungkinkan pemisahan kelas berdasarkan kombinasi pangkat dari fitur-fitur asli, yang berguna dalam mengungkap pola interaksi antar fitur.
Radial Basis Function (RBF) Kernel
Merupakan kernel paling populer yang sangat efektif untuk data berdimensi tinggi dan tidak linier. RBF kernel bekerja dengan mengukur kesamaan antar titik data berdasarkan jarak Euclidean, dan mampu menghasilkan pemisahan yang fleksibel dan kompleks.
Sigmoid Kernel
Kernel ini menyerupai fungsi aktivasi dalam jaringan saraf dan kadang digunakan dalam arsitektur tertentu. Meskipun tidak sepopuler RBF, kernel ini berguna dalam konteks khusus, terutama saat meniru perilaku model neural network.
Dengan memilih kernel yang sesuai, pengguna SVM dapat meningkatkan kinerja model secara signifikan. Pemilihan kernel biasanya disesuaikan dengan karakteristik data dan tujuan analisis.
Support Vector Machine memiliki berbagai varian yang dirancang untuk menangani beragam jenis data dan kebutuhan analisis. Secara umum, SVM terbagi menjadi dua kelompok utama: SVM Linier dan SVM Nonlinier, dengan beberapa pengembangan lanjutannya.
Digunakan ketika data dapat dipisahkan secara linier. Model ini membangun sebuah hyperplane berdasarkan persamaan berikut:
w · x + b = 0
Dengan keterangan:
SVM linier tergolong cepat dan efisien, serta cocok diterapkan pada dataset yang sederhana dan tidak terlalu kompleks.
Diasumsikan bahwa semua data dapat dipisahkan secara sempurna tanpa kesalahan.
Margin dihitung dengan memaksimalkan rumus:
γ = a / ||w||, dengan batas keputusan: (w · xj + b) yj ≥ a
Cocok untuk data bersih tanpa noise.
Dirancang untuk menangani data yang mengandung overlap atau noise.
Memperkenalkan slack variable ξ dan parameter kontrol C.
Menawarkan kompromi antara kompleksitas model dan tingkat kesalahan.
Untuk kasus di mana data tidak dapat dipisahkan secara linier, SVM menggunakan fungsi kernel untuk memetakan data ke ruang berdimensi lebih tinggi, sehingga memungkinkan pemisahan linier di ruang tersebut (Schölkopf & Smola, 2002).
Memperluas SVM ke kasus klasifikasi dengan lebih dari dua kelas.
Umumnya menggunakan pendekatan:
# Dataset XOR-like (nonlinier)
set.seed(260626)
x <- matrix(rnorm(200), ncol=2)
y <- xor(x[,1] > 0, x[,2] > 0)
y <- as.factor(ifelse(y, "A", "B"))
data_xor <- data.frame(x=x, y=y)
# SVM dengan kernel radial
library(e1071)
svm_rbf <- svm(y ~ ., data=data_xor, kernel="radial", gamma=1)
plot(svm_rbf, data_xor, main="SVM RBF: Data Non-Linier")
Kernel Trick adalah teknik penting dalam SVM yang memungkinkan pemodelan data nonlinier tanpa perlu memproyeksikan data secara eksplisit ke ruang berdimensi tinggi. Alih-alih melakukan transformasi fitur secara langsung, kernel trick menghitung produk dalam (dot product) dari fitur yang telah dipetakan menggunakan fungsi kernel:
K(xi, xj) = φ(xi)T φ(xj)
Dengan pendekatan ini, SVM dapat menangani kompleksitas data secara efisien tanpa beban komputasi tambahan dari transformasi eksplisit.
Berikut beberapa fungsi kernel yang umum digunakan dalam SVM:
Linear: 𝐾(x, y) = xᵀy Cocok untuk data yang dapat dipisahkan secara linier.
Polynomial: 𝐾(x, y) = (xᵀy + c)d Mampu menangkap hubungan nonlinier dengan derajat tertentu (degree d).
RBF (Radial Basis Function): 𝐾(x, y) = exp(−γ‖x − y‖²) Sangat fleksibel dan umum digunakan untuk data dengan distribusi kompleks.
Sigmoid: 𝐾(x, y) = tanh(κxᵀy + θ) Menyerupai fungsi aktivasi dalam jaringan saraf.
Pemilihan fungsi kernel yang tepat bergantung pada karakteristik data dan tujuan analisis.
# Linear SVM
svm_linear <- svm(y ~ ., data=data_xor, kernel="linear")
# Plot hasil
p1 <- plot(svm_linear, data_xor, main="SVM Linear (Kurang Optimal)")
p2 <- plot(svm_rbf, data_xor, main="SVM RBF (Lebih Akurat untuk Data Nonlinier)")
| Kriteria | SVM | Naive Bayes | Regresi Logistik | Decision Tree | Neural Network |
|---|---|---|---|---|---|
| Ketahanan terhadap overfitting | Tinggi | Rendah | Sedang | Rendah | Tergantung arsitektur |
| Interpretabilitas | Sedang | Tinggi | Tinggi | Tinggi | Rendah |
| Kebutuhan jumlah data | Sedang | Rendah | Rendah | Rendah | Tinggi |
| Kemampuan memodelkan nonlinier | Tinggi (via kernel) | Rendah | Rendah | Sedang | Tinggi |
| Kecepatan pelatihan | Sedang hingga lambat | Sangat cepat | Cepat | Cepat | Lambat |
| Akurasi pada data kompleks | Tinggi | Rendah | Sedang | Sedang | Tinggi |
SVM direkomendasikan dalam situasi berikut:
Support Vector Machine (SVM) merupakan salah satu algoritma yang terbukti andal dan serbaguna dalam menyelesaikan berbagai persoalan di dunia nyata. Tidak hanya unggul dalam tugas klasifikasi, SVM juga dapat diaplikasikan pada regresi, deteksi anomali, hingga segmentasi data secara tidak langsung. Kemampuannya dalam menangani data berdimensi tinggi serta struktur nonlinier melalui pendekatan kernel menjadikannya pilihan utama dalam berbagai aplikasi industri maupun penelitian.
SVM banyak digunakan dalam bidang Natural Language Processing (NLP), terutama pada tugas-tugas klasifikasi berbasis teks, seperti:
Dalam bidang computer vision, SVM memainkan peran penting dalam berbagai aplikasi, antara lain:
Di bidang biomedis dan bioinformatika, SVM memberikan kontribusi besar dalam analisis data biomolekuler yang kompleks:
SVM juga berperan penting dalam pemodelan spasial dan geosains, seperti:
Meskipun lebih dikenal dalam klasifikasi, SVM juga mendukung regresi melalui pendekatan Support Vector Regression (SVR), antara lain:
SVM efektif dalam mendeteksi pola tidak wajar pada data, menjadikannya penting dalam konteks keamanan:
Walau bukan algoritma klastering murni, pendekatan berbasis SVM dapat mendukung segmentasi data dalam konteks tertentu, seperti:
Support Vector Machine (SVM) merupakan metode klasifikasi populer
dalam kelompok soft modeling. Meskipun teori matematis di balik
SVM relatif kompleks, pembahasan kali ini akan difokuskan pada penerapan
praktisnya menggunakan bahasa pemrograman R. Tujuan utama bagian ini
adalah mendemonstrasikan proses klasifikasi menggunakan algoritma SVM
dengan berbagai kernel, serta membandingkan performa model linear dan
non-linear pada data Iris yang sudah tersedia di dalam paket
datasets.
library(tidyverse)
library(e1071) # Untuk model SVM
library(caret) # Untuk evaluasi model
library(patchwork) # Untuk menggabungkan visualisasi
library(reshape2) # Untuk manipulasi data
# Memuat dataset Iris
data(iris)
df <- iris
head(df)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Dataset Iris berisi 150 observasi bunga dengan 4 fitur
numerik (panjang dan lebar sepal serta petal) dan satu kolom target
Species. Data ini banyak digunakan untuk klasifikasi
multikelas.
Eksplorasi awal terhadap dataset dilakukan melalui statistik
deskriptif, pemeriksaan distribusi kelas, serta visualisasi hubungan
antar fitur. Hasil dari fungsi summary(df) memberikan
gambaran umum mengenai sebaran masing-masing variabel numerik dalam
dataset.
# Statistik deskriptif dan distribusi label
summary(df)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
table(df$Species)
##
## setosa versicolor virginica
## 50 50 50
Berdasarkan hasil tersebut, variabel Sepal.Length memiliki rentang nilai dari 4.3 hingga 7.9, dengan nilai median 5.8 dan rata-rata 5.843. Variabel Sepal.Width memiliki median 3.0 dan rata-rata 3.057, sedangkan Petal.Length menunjukkan median 4.35 dan rata-rata 3.758. Fitur Petal.Width memiliki nilai median 1.3 dan rata-rata 1.199. Keempat fitur ini menunjukkan variasi yang cukup mencolok, yang berpotensi signifikan dalam membedakan antar kelas bunga.
Distribusi label kelas pada variabel Species
diperiksa menggunakan fungsi table(df$Species), yang
menunjukkan bahwa dataset terdiri dari tiga kelas: setosa,
versicolor, dan virginica, masing-masing
sebanyak 50 observasi. Hal ini mengindikasikan bahwa dataset bersifat
seimbang (balanced), yang menguntungkan dalam proses pelatihan
model klasifikasi karena tidak terdapat dominasi kelas tertentu yang
dapat menyebabkan bias.
# Visualisasi hubungan antar fitur
pairs(df[1:4], col = df$Species, pch = 19, main = "Pairwise Plot antar Fitur")
Selanjutnya, hubungan antar fitur divisualisasikan melalui fungsi
pairs(), yang menghasilkan pairwise scatter plot
antar empat fitur numerik utama. Warna titik-titik pada plot disesuaikan
dengan kelas pada variabel Species, yaitu:
Dari visualisasi ini, terlihat bahwa fitur
Petal.Length dan Petal.Width
memberikan pemisahan kelas yang paling jelas, terutama dalam membedakan
spesies setosa dari dua spesies lainnya. Kelompok
setosa membentuk klaster yang terpisah secara jelas dalam
ruang fitur tersebut, sementara versicolor dan
virginica masih menunjukkan tumpang tindih (overlap) pada
beberapa kombinasi fitur, meskipun dalam tingkat yang lebih rendah.
Sebaliknya, fitur Sepal.Length dan
Sepal.Width menunjukkan pola pemisahan yang kurang
kuat, dengan banyaknya titik dari ketiga kelas yang saling bertumpuk di
area yang sama.
Temuan ini memberikan indikasi awal bahwa fitur petal lebih informatif dibandingkan fitur sepal dalam proses klasifikasi spesies bunga iris. Hal ini akan menjadi pertimbangan penting dalam pemilihan fitur dan pembentukan model machine learning selanjutnya.
set.seed(260626)
trainIndex <- createDataPartition(df$Species, p = 0.8, list = FALSE)
trainData <- df[trainIndex, ]
testData <- df[-trainIndex, ]
Dataset dibagi menjadi 80% data latih dan 20% data uji secara
stratifikasi berdasarkan kelas Species. Ini memastikan
distribusi kelas tetap seimbang di kedua subset.
# Pelatihan model SVM linear
svm_linear <- svm(Species ~ ., data = trainData, kernel = "linear", cost = 1)
summary(svm_linear)
##
## Call:
## svm(formula = Species ~ ., data = trainData, kernel = "linear", cost = 1)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: linear
## cost: 1
##
## Number of Support Vectors: 25
##
## ( 2 12 11 )
##
##
## Number of Classes: 3
##
## Levels:
## setosa versicolor virginica
# Prediksi dan evaluasi
pred_linear <- predict(svm_linear, newdata = testData)
cm_linear <- confusionMatrix(pred_linear, testData$Species)
cm_linear
## Confusion Matrix and Statistics
##
## Reference
## Prediction setosa versicolor virginica
## setosa 10 0 0
## versicolor 0 9 1
## virginica 0 1 9
##
## Overall Statistics
##
## Accuracy : 0.9333
## 95% CI : (0.7793, 0.9918)
## No Information Rate : 0.3333
## P-Value [Acc > NIR] : 8.747e-12
##
## Kappa : 0.9
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: setosa Class: versicolor Class: virginica
## Sensitivity 1.0000 0.9000 0.9000
## Specificity 1.0000 0.9500 0.9500
## Pos Pred Value 1.0000 0.9000 0.9000
## Neg Pred Value 1.0000 0.9500 0.9500
## Prevalence 0.3333 0.3333 0.3333
## Detection Rate 0.3333 0.3000 0.3000
## Detection Prevalence 0.3333 0.3333 0.3333
## Balanced Accuracy 1.0000 0.9250 0.9250
Model dilatih menggunakan formula Species ~ ., yang
menyatakan bahwa keempat fitur numerik (Sepal.Length, Sepal.Width,
Petal.Length, dan Petal.Width) digunakan untuk memprediksi kelas target
Species. Nilai parameter cost = 1 digunakan
untuk mengontrol trade-off antara maximizing the margin dan
minimizing classification error. Parameter ini menentukan
seberapa besar penalti yang diberikan terhadap kesalahan klasifikasi;
nilai cost = 1 dianggap sebagai pilihan yang cukup
konservatif untuk menghindari overfitting pada data latih yang
terbatas.
Output dari fungsi summary(svm_linear) menunjukkan
beberapa informasi penting:
setosa, 12 untuk versicolor, dan
11 untuk virginica.Jumlah support vector mencerminkan observasi yang paling “kritis”
dalam membentuk batas keputusan (decision boundary). Dalam hal
ini, kelas setosa sangat mudah dipisahkan dari dua kelas
lainnya, terlihat dari hanya dua support vector yang diperlukan,
sedangkan versicolor dan virginica memerlukan
lebih banyak support vector, yang menunjukkan bahwa batas antar keduanya
lebih kompleks dan memerlukan penyesuaian margin yang lebih
hati-hati.
Model dievaluasi menggunakan data uji, dengan hasil prediksi dibandingkan terhadap label sebenarnya melalui confusion matrix:
| Reference / Prediction | Setosa | Versicolor | Virginica |
|---|---|---|---|
| Setosa | 10 | 0 | 0 |
| Versicolor | 0 | 9 | 1 |
| Virginica | 0 | 1 | 9 |
Dari confusion matrix tersebut, dapat disimpulkan bahwa:
setosa diklasifikasikan dengan
benar (akurasi 100%).versicolor, terdapat satu observasi yang keliru
diklasifikasikan sebagai virginica.virginica
diklasifikasikan salah sebagai versicolor.Beberapa metrik penting yang diperoleh dari evaluasi model adalah sebagai berikut:
setosa, dan 92.5% untuk versicolor maupun
virginica, menunjukkan performa model yang baik dan cukup
seimbang antar kelas.Hasil ini memperlihatkan bahwa model SVM dengan kernel linear mampu
mengklasifikasikan data iris dengan sangat baik, terutama pada kelas
setosa yang secara visual dan statistik memang sangat
terpisah dari dua kelas lainnya. Meskipun terdapat sedikit tumpang
tindih antara versicolor dan virginica, model
tetap mampu menjaga performa prediktif dengan tingkat akurasi yang
tinggi dan kesalahan yang sangat rendah.
Secara keseluruhan, SVM linear terbukti menjadi model yang efisien dan akurat untuk dataset ini. Namun, untuk memperdalam analisis, pengujian menggunakan kernel non-linear (seperti radial basis function) juga dapat dipertimbangkan pada bagian selanjutnya untuk melihat apakah akurasi model dapat ditingkatkan, khususnya pada observasi yang sulit dipisahkan secara linier.
Dalam analisis ini, model SVM dilatih menggunakan kernel
radial, dengan parameter cost = 1 dan
gamma = 0.5. Parameter cost mengontrol
trade-off antara margin maksimum dan kesalahan klasifikasi, sedangkan
gamma menentukan seberapa jauh pengaruh sebuah titik data
terhadap pembentukan hyperplane.
# Pelatihan model SVM dengan kernel RBF
svm_rbf <- svm(Species ~ ., data = trainData, kernel = "radial", cost = 1, gamma = 0.5)
summary(svm_rbf)
##
## Call:
## svm(formula = Species ~ ., data = trainData, kernel = "radial", cost = 1,
## gamma = 0.5)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: radial
## cost: 1
##
## Number of Support Vectors: 50
##
## ( 12 18 20 )
##
##
## Number of Classes: 3
##
## Levels:
## setosa versicolor virginica
Hasil dari fungsi summary() menunjukkan bahwa model
membentuk total 50 support vectors, yang tersebar di
ketiga kelas sebagai berikut: 12 untuk setosa, 18 untuk
versicolor, dan 20 untuk virginica. Jumlah support
vector yang lebih besar dibandingkan dengan SVM linear (25 support
vector) mengindikasikan bahwa model RBF menyerap lebih banyak informasi
dari data pelatihan untuk membentuk hyperplane yang kompleks.
# Prediksi dan evaluasi
pred_rbf <- predict(svm_rbf, newdata = testData)
cm_rbf <- confusionMatrix(pred_rbf, testData$Species)
cm_rbf
## Confusion Matrix and Statistics
##
## Reference
## Prediction setosa versicolor virginica
## setosa 10 0 0
## versicolor 0 10 2
## virginica 0 0 8
##
## Overall Statistics
##
## Accuracy : 0.9333
## 95% CI : (0.7793, 0.9918)
## No Information Rate : 0.3333
## P-Value [Acc > NIR] : 8.747e-12
##
## Kappa : 0.9
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: setosa Class: versicolor Class: virginica
## Sensitivity 1.0000 1.0000 0.8000
## Specificity 1.0000 0.9000 1.0000
## Pos Pred Value 1.0000 0.8333 1.0000
## Neg Pred Value 1.0000 1.0000 0.9091
## Prevalence 0.3333 0.3333 0.3333
## Detection Rate 0.3333 0.3333 0.2667
## Detection Prevalence 0.3333 0.4000 0.2667
## Balanced Accuracy 1.0000 0.9500 0.9000
Evaluasi performa model ditunjukkan melalui confusion matrix berikut:
| Prediction | setosa | versicolor | virginica |
|---|---|---|---|
| setosa | 10 | 0 | 0 |
| versicolor | 0 | 10 | 2 |
| virginica | 0 | 0 | 8 |
Akurasi keseluruhan model mencapai 93.33%, dengan nilai Kappa = 0.9, menandakan tingkat kesepakatan yang sangat tinggi antara hasil prediksi dan nilai aktual. Statistik by class menunjukkan bahwa:
Secara umum, nilai Balanced Accuracy untuk ketiga kelas berkisar antara 0.90 hingga 1.00, yang menunjukkan bahwa model mampu mengenali masing-masing kelas dengan baik meskipun terdapat beberapa minor error dalam membedakan versicolor dan virginica. Hal ini umum terjadi mengingat kemiripan morfologis antara kedua spesies tersebut dalam dataset Iris.
Penggunaan kernel RBF memberikan fleksibilitas model untuk memetakan data ke ruang berdimensi tinggi, sehingga dapat menangkap struktur kompleks antar fitur yang tidak linier. Meskipun menghasilkan akurasi yang sama dengan model linear dalam kasus ini (93.33%), RBF menunjukkan fit yang lebih dalam terhadap data, ditunjukkan oleh jumlah support vector yang lebih besar dan pemisahan antar kelas yang lebih eksplisit, khususnya pada kelas versicolor.
Namun, keunggulan ini datang dengan peningkatan kompleksitas model. Oleh karena itu, pemilihan kernel sebaiknya mempertimbangkan trade-off antara interpretabilitas dan fleksibilitas, serta dilakukan melalui pendekatan eksploratif seperti cross-validation dan tuning hyperparameter (misalnya dengan grid search).
Model SVM dengan kernel RBF terbukti mampu menghasilkan performa
klasifikasi yang sangat baik pada dataset Iris. Keunggulannya
terletak pada kemampuannya dalam menangani non-linearitas data, sehingga
cocok diterapkan pada kasus-kasus nyata yang kompleks, seperti
klasifikasi gambar, pengenalan pola suara, atau data genomik. Namun,
evaluasi lanjutan terhadap tuning parameter cost dan
gamma masih dapat meningkatkan akurasi dan generalisasi
model lebih lanjut.
Setelah melatih dan mengevaluasi dua model Support Vector Machine (SVM), yaitu SVM Linear dan SVM Non-Linear dengan kernel Radial Basis Function (RBF), tahap selanjutnya adalah membandingkan performa keduanya secara kuantitatif menggunakan berbagai metrik evaluasi: Accuracy, Precision, Recall, dan F1-Score.
Untuk masing-masing model, metrik dihitung per kelas (setosa, versicolor, virginica) agar memberikan gambaran yang lebih detail tentang kemampuan klasifikasi terhadap masing-masing jenis spesies bunga iris. Nilai accuracy menunjukkan proporsi keseluruhan prediksi yang benar, sementara precision dan recall memberikan wawasan tentang ketepatan dan kelengkapan klasifikasi untuk tiap kelas. F1-Score sebagai harmonisasi antara precision dan recall, sangat bermanfaat dalam kondisi data tidak seimbang atau ketika kesalahan klasifikasi memiliki konsekuensi berbeda.
Berikut adalah perbandingan lengkapnya:
# Akurasi masing-masing model
acc_linear <- cm_linear$overall["Accuracy"]
acc_rbf <- cm_rbf$overall["Accuracy"]
# Precision, Recall, dan F1-score
prec_linear <- cm_linear$byClass[,"Precision"]
recall_linear <- cm_linear$byClass[,"Recall"]
f1_linear <- 2 * (prec_linear * recall_linear) / (prec_linear + recall_linear)
prec_rbf <- cm_rbf$byClass[,"Precision"]
recall_rbf <- cm_rbf$byClass[,"Recall"]
f1_rbf <- 2 * (prec_rbf * recall_rbf) / (prec_rbf + recall_rbf)
# Membuat dataframe untuk membandingkan metrik
comparison_df <- data.frame(
Model = rep(c("SVM Linear", "SVM RBF"), each = 3),
Class = rep(levels(testData$Species), times = 2),
Accuracy = rep(c(acc_linear, acc_rbf), each = 3),
Precision = c(prec_linear, prec_rbf),
Recall = c(recall_linear, recall_rbf),
F1_Score = c(f1_linear, f1_rbf)
)
knitr::kable(comparison_df, caption = "Perbandingan Metrik Evaluasi Tiap Model")
| Model | Class | Accuracy | Precision | Recall | F1_Score |
|---|---|---|---|---|---|
| SVM Linear | setosa | 0.9333333 | 1.0000000 | 1.0 | 1.0000000 |
| SVM Linear | versicolor | 0.9333333 | 0.9000000 | 0.9 | 0.9000000 |
| SVM Linear | virginica | 0.9333333 | 0.9000000 | 0.9 | 0.9000000 |
| SVM RBF | setosa | 0.9333333 | 1.0000000 | 1.0 | 1.0000000 |
| SVM RBF | versicolor | 0.9333333 | 0.8333333 | 1.0 | 0.9090909 |
| SVM RBF | virginica | 0.9333333 | 1.0000000 | 0.8 | 0.8888889 |
Tabel di atas menampilkan bahwa keduanya mencapai tingkat akurasi keseluruhan sebesar 93.33%, yang mencerminkan kinerja yang sangat baik pada dataset uji. Namun, ketika dievaluasi lebih dalam, terdapat perbedaan signifikan dalam perilaku masing-masing model terhadap kelas-kelas tertentu.
Model SVM Linear menunjukkan performa yang konsisten di semua kelas dengan nilai precision, recall, dan F1-score yang sama rata, menandakan bahwa model ini bekerja sangat baik ketika batas antar kelas bersifat linear dan jelas. Hal ini konsisten dengan karakteristik linear SVM yang optimal untuk pemisahan linier antar kelas.
Sementara itu, model SVM RBF, yang didesain untuk menangkap batas-batas non-linear, memberikan keunggulan tersendiri dalam mendeteksi kompleksitas kelas. Misalnya, untuk kelas versicolor, recall mencapai 1.0 meskipun precision sedikit lebih rendah (0.833), yang menunjukkan bahwa model ini sangat sensitif dalam mengenali seluruh anggota kelas tersebut. Di sisi lain, kelas virginica memiliki recall yang lebih rendah (0.8), meskipun precision-nya sempurna (1.0), yang mengindikasikan bahwa model cenderung konservatif dalam menetapkan prediksi virginica, namun akurat ketika melakukannya.
Perbedaan ini menyoroti kekuatan dari kernel RBF yang mampu memodelkan hubungan kompleks antar fitur, meskipun terkadang mengorbankan keseragaman dalam metrik antar kelas. Dalam konteks aplikasi nyata, pemilihan model terbaik sangat tergantung pada tujuan klasifikasi: apakah lebih penting meminimalkan kesalahan tipe I (false positive) atau tipe II (false negative), serta seberapa kompleks pola data yang hendak dipelajari.
Secara umum, SVM Linear lebih cocok untuk data dengan batas pemisah yang bersifat linier dan cukup jelas. Sebaliknya, SVM RBF memberikan fleksibilitas lebih tinggi untuk menangkap pola-pola non-linear dalam data, meskipun performanya bisa sedikit bervariasi antar kelas. Oleh karena itu, pemilihan kernel sebaiknya mempertimbangkan baik sifat distribusi data maupun prioritas metrik performa yang relevan dengan tujuan analisis.
# Transformasi ke format long untuk visualisasi
comparison_long <- melt(comparison_df, id.vars = c("Model", "Class"))
# Visualisasi metrik performa
ggplot(comparison_long, aes(x = Class, y = value, fill = Model)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~variable, scales = "free_y") +
labs(title = "Perbandingan Metrik Evaluasi SVM Linear vs RBF",
y = "Nilai", x = "Kelas") +
theme_minimal(base_size = 13) +
scale_fill_manual(values = c("#00BFC4", "#F8766D"))
Visualisasi di atas menyajikan perbandingan metrik evaluasi antara dua jenis kernel Support Vector Machine (SVM), yaitu SVM Linear dan SVM dengan kernel Radial Basis Function (RBF), terhadap tiga kelas dalam dataset: setosa, versicolor, dan virginica. Metrik evaluasi yang ditampilkan meliputi Accuracy, Precision, Recall, dan F1-Score, yang masing-masing diplot secara terpisah menggunakan pendekatan faceting.
Secara umum, baik SVM Linear maupun SVM RBF menunjukkan performa yang sangat tinggi pada kelas setosa di seluruh metrik, yang mengindikasikan bahwa kelas ini paling mudah untuk dipisahkan oleh kedua model. Hal ini terlihat dari nilai evaluasi yang mendekati 1 pada seluruh metrik.
Namun, perbedaan performa mulai terlihat pada kelas versicolor dan virginica. Untuk metrik Recall, SVM RBF memberikan performa lebih tinggi pada kelas versicolor dibandingkan SVM Linear. Hal ini mengindikasikan bahwa model RBF lebih sensitif dalam mengidentifikasi anggota kelas versicolor, meskipun trade-off-nya adalah sedikit penurunan Precision dibandingkan SVM Linear. Sebaliknya, pada kelas virginica, model SVM Linear menunjukkan Recall yang sedikit lebih tinggi, tetapi Precision dan F1-Score dari kedua model relatif sebanding.
Metrik F1-Score, yang merupakan harmonisasi antara Precision dan Recall, menunjukkan bahwa SVM RBF unggul pada kelas versicolor, sementara perbedaan antar model untuk kelas virginica relatif kecil. Untuk metrik Accuracy, kedua model menunjukkan performa yang hampir identik pada seluruh kelas, yang mengindikasikan bahwa secara umum akurasi klasifikasi keduanya tinggi.
Secara keseluruhan, SVM RBF cenderung memberikan performa yang lebih baik dan konsisten terutama pada kelas yang lebih sulit diklasifikasikan seperti versicolor, yang ditandai dengan nilai Recall dan F1-Score yang relatif lebih tinggi dibandingkan SVM Linear. Hal ini menunjukkan keunggulan kernel RBF dalam menangkap pola non-linear pada data, yang tidak bisa ditangani secara optimal oleh kernel linear.
Dengan demikian, apabila kompleksitas dan waktu pelatihan bukan menjadi kendala utama, SVM RBF dapat dijadikan pilihan utama untuk mencapai hasil klasifikasi yang lebih akurat dan seimbang antar kelas, khususnya pada data dengan struktur non-linear.
Untuk memberikan pemahaman visual terhadap cara kerja Support Vector Machine (SVM) dalam mengklasifikasikan data, dilakukan visualisasi decision boundary menggunakan dua fitur dari dataset Iris, yaitu Sepal.Length dan Sepal.Width. Kedua fitur ini dipilih karena keduanya bersifat numerik dan memungkinkan divisualisasikan dalam ruang dua dimensi (2D).
# Menggunakan dua fitur untuk visualisasi 2D
df2 <- df %>% select(Sepal.Length, Sepal.Width, Species)
# Model SVM Linear dan RBF pada 2D
svm_linear_2d <- svm(Species ~ ., data = df2, kernel = "linear", cost = 1)
svm_rbf_2d <- svm(Species ~ ., data = df2, kernel = "radial", cost = 1, gamma = 0.5)
# Visualisasi decision boundary
par(mfrow = c(1, 2))
plot(svm_linear_2d, df2, main = "Decision Boundary - SVM Linear")
plot(svm_rbf_2d, df2, main = "Decision Boundary - SVM RBF")
| Aspek | SVM Linear | SVM RBF |
|---|---|---|
| Bentuk boundary | Garis lurus | Lengkung/fleksibel |
| Kemampuan memisah kelas | Baik untuk data yang terpisah linier | Lebih baik untuk data yang tumpang tindih |
| Kompleksitas model | Lebih sederhana dan cepat | Lebih kompleks dan memerlukan tuning |
| Overfitting | Risiko overfitting rendah | Risiko overfitting lebih tinggi jika tidak dituning dengan baik |
Visualisasi ini menegaskan pentingnya pemilihan kernel yang sesuai dalam algoritma SVM. Untuk data yang dapat dipisahkan secara linier, kernel linear cukup efisien. Namun, untuk kasus nyata yang lebih kompleks dengan pola distribusi non-linier, kernel RBF memberikan hasil klasifikasi yang lebih akurat karena fleksibilitasnya dalam membentuk decision boundary.
Dalam algoritma Support Vector Machine (SVM) dengan kernel non-linear
seperti Radial Basis Function (RBF), pemilihan parameter
cost (C) dan
gamma (γ) sangat mempengaruhi kinerja
model. Parameter cost mengontrol trade-off antara margin
yang lebar dan kesalahan klasifikasi pada data latih, sedangkan
gamma menentukan seberapa jauh pengaruh dari satu titik
data terhadap titik lainnya. Oleh karena itu, proses tuning parameter
merupakan tahap penting dalam optimasi model.
Pada eksperimen ini, dilakukan tuning parameter dengan menggunakan
fungsi tune() dari paket
e1071. Rentang nilai parameter yang
dieksplorasi adalah:
cost ∈ {0.1, 1, 10}gamma ∈ {0.1, 0.5, 1}Model divalidasi menggunakan 10-fold cross-validation untuk memastikan generalisasi model terhadap data yang tidak terlihat. Prosedur ini secara sistematis mengevaluasi seluruh kombinasi parameter untuk mencari kombinasi dengan error cross-validation terendah.
set.seed(260626)
# Tuning parameter cost dan gamma
tuned <- tune(svm, Species ~ ., data = trainData,
kernel = "radial",
ranges = list(cost = c(0.1, 1, 10),
gamma = c(0.1, 0.5, 1)))
summary(tuned)
##
## Parameter tuning of 'svm':
##
## - sampling method: 10-fold cross validation
##
## - best parameters:
## cost gamma
## 1 0.5
##
## - best performance: 0.025
##
## - Detailed performance results:
## cost gamma error dispersion
## 1 0.1 0.1 0.12500000 0.10577463
## 2 1.0 0.1 0.03333333 0.05826716
## 3 10.0 0.1 0.05000000 0.05826716
## 4 0.1 0.5 0.10833333 0.10430546
## 5 1.0 0.5 0.02500000 0.05624571
## 6 10.0 0.5 0.05000000 0.07027284
## 7 0.1 1.0 0.05000000 0.07027284
## 8 1.0 1.0 0.05000000 0.07027284
## 9 10.0 1.0 0.05833333 0.08827916
# Model terbaik hasil tuning
best_model <- tuned$best.model
Hasil tuning menunjukkan bahwa kombinasi parameter terbaik adalah:
Dengan nilai cross-validation error sebesar 0.025, artinya hanya 2.5% dari observasi pada data latih yang diklasifikasikan salah selama proses validasi. Ini merupakan kinerja yang sangat baik mengingat kompleksitas dataset Iris yang relatif rendah namun tetap mengandung beberapa overlap antar kelas.
Tabel hasil lengkap tuning:
| Cost | Gamma | Error Rate | Dispersi |
|---|---|---|---|
| 0.1 | 0.1 | 0.125 | 0.106 |
| 1.0 | 0.1 | 0.033 | 0.058 |
| 10.0 | 0.1 | 0.050 | 0.058 |
| 0.1 | 0.5 | 0.108 | 0.104 |
| 1.0 | 0.5 | 0.025 | 0.056 |
| 10.0 | 0.5 | 0.050 | 0.070 |
| 0.1 | 1.0 | 0.050 | 0.070 |
| 1.0 | 1.0 | 0.050 | 0.070 |
| 10.0 | 1.0 | 0.058 | 0.088 |
Dari tabel di atas, dapat disimpulkan bahwa pemilihan nilai
cost yang terlalu rendah (misal 0.1) menyebabkan error yang
lebih tinggi karena model terlalu permisif terhadap kesalahan
klasifikasi. Sebaliknya, cost yang terlalu besar (misal 10)
tidak memberikan perbaikan berarti dan bahkan bisa menyebabkan
overfitting.
Setelah kombinasi parameter optimal ditemukan, model SVM terbaik kemudian dievaluasi terhadap data uji:
# Evaluasi model terbaik
pred_best <- predict(best_model, newdata = testData)
confusionMatrix(pred_best, testData$Species)
## Confusion Matrix and Statistics
##
## Reference
## Prediction setosa versicolor virginica
## setosa 10 0 0
## versicolor 0 10 2
## virginica 0 0 8
##
## Overall Statistics
##
## Accuracy : 0.9333
## 95% CI : (0.7793, 0.9918)
## No Information Rate : 0.3333
## P-Value [Acc > NIR] : 8.747e-12
##
## Kappa : 0.9
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: setosa Class: versicolor Class: virginica
## Sensitivity 1.0000 1.0000 0.8000
## Specificity 1.0000 0.9000 1.0000
## Pos Pred Value 1.0000 0.8333 1.0000
## Neg Pred Value 1.0000 1.0000 0.9091
## Prevalence 0.3333 0.3333 0.3333
## Detection Rate 0.3333 0.3333 0.2667
## Detection Prevalence 0.3333 0.4000 0.2667
## Balanced Accuracy 1.0000 0.9500 0.9000
Hasil evaluasi ditunjukkan oleh confusion matrix berikut:
| Prediction Reference | Setosa | Versicolor | Virginica |
|---|---|---|---|
| Setosa | 10 | 0 | 0 |
| Versicolor | 0 | 10 | 2 |
| Virginica | 0 | 0 | 8 |
Accuracy: 93.33%
95% CI (Confidence Interval): (77.93%, 99.18%)
Kappa: 0.90 → menunjukkan tingkat kesepakatan sangat tinggi antara prediksi model dan label sebenarnya.
Class-wise Sensitivity dan Specificity:
Dari hasil evaluasi, model SVM yang telah dituning menunjukkan
peningkatan akurasi klasifikasi secara signifikan
dibanding model sebelum tuning. Dengan meminimalkan error melalui
kombinasi parameter cost dan gamma yang
optimal, model menjadi lebih sensitif terhadap perbedaan kelas dan mampu
menangkap kompleksitas pola distribusi data.
Tuning parameter juga memperjelas bahwa meskipun SVM RBF bersifat non-linear dan powerful, kinerjanya sangat bergantung pada pemilihan parameter. Pemilihan parameter yang tidak tepat tidak hanya menurunkan performa model, tetapi juga bisa menyebabkan overfitting atau underfitting.
Setelah dilakukan pemodelan menggunakan Support Vector Machine (SVM) pada dataset Iris, bagian ini menyajikan analisis dan interpretasi menyeluruh terhadap hasil evaluasi model yang telah dibangun.
Berdasarkan tabel Perbandingan Metrik Evaluasi Tiap Model, baik model SVM Linear maupun SVM dengan kernel RBF menunjukkan akurasi keseluruhan sebesar 93,33%. Ini mencerminkan performa klasifikasi yang sangat baik terhadap data Iris. Namun, jika ditelusuri lebih dalam berdasarkan metrik per kelas, masing-masing model menunjukkan kekuatan dan kelemahan yang berbeda.
Pada kedua model, kelas Setosa berhasil diklasifikasikan secara sempurna:
Hasil ini menunjukkan bahwa kelas Setosa memiliki pola fitur yang sangat khas dan mudah dibedakan dari dua kelas lainnya, sehingga tidak terjadi kesalahan klasifikasi.
Meskipun akurasi total sama, model SVM RBF menunjukkan kecenderungan lebih sensitif terhadap kelas Versicolor (tidak melewatkan sampel), namun memiliki trade-off dalam bentuk menurunnya spesifisitas, karena sebagian prediksi Versicolor ternyata salah klasifikasi.
Hal ini menunjukkan bahwa SVM RBF lebih konservatif dalam mengklasifikasikan kelas Virginica — hanya memberikan prediksi jika yakin benar, namun berisiko melewatkan sejumlah sampel yang seharusnya masuk ke kelas tersebut (recall rendah).
Proses tuning dilakukan terhadap parameter cost dan
gamma menggunakan skema 10-fold cross-validation. Hasil
tuning menunjukkan:
cost = 1,
gamma = 0.5Kombinasi ini terbukti optimal untuk menjaga keseimbangan antara kompleksitas model dan generalisasi. Nilai gamma yang moderat (0.5) memungkinkan model menangkap pola non-linier tanpa terlalu overfit terhadap noise. Sementara itu, nilai cost = 1 memberikan margin keputusan yang cukup luas dengan toleransi terhadap kesalahan minor.
Setelah proses tuning, model SVM RBF terbaik diuji pada data uji. Hasil evaluasi sebagai berikut:
| Prediksi | Setosa | Versicolor | Virginica |
|---|---|---|---|
| Setosa | 10 | 0 | 0 |
| Versicolor | 0 | 10 | 2 |
| Virginica | 0 | 0 | 8 |
Model mampu mengklasifikasikan Setosa dengan sempurna, sedangkan terjadi kesalahan minor pada Virginica, di mana dua sampel Virginica diklasifikasikan sebagai Versicolor. Hal ini menunjukkan bahwa terdapat area tumpang tindih dalam ruang fitur antara kedua kelas tersebut, yang menjadi tantangan tersendiri dalam klasifikasi berbasis margin.
SVM Linear menunjukkan performa yang stabil di seluruh kelas, terutama ketika data memiliki pola linier. Model ini cocok digunakan sebagai baseline yang kuat.
SVM RBF yang telah dituning memberikan kinerja lebih unggul secara keseluruhan, berkat kemampuannya menangkap pola non-linear pada data. Hal ini tercermin dari hasil evaluasi dan akurasi tinggi setelah tuning.
Tuning hyperparameter (cost dan
gamma) terbukti krusial dalam meningkatkan
performa model SVM RBF. Tanpa tuning yang tepat, model berisiko
mengalami underfitting atau overfitting.
Meskipun hasil model sudah baik, masih terdapat sedikit kesalahan dalam membedakan antara Versicolor dan Virginica. Oleh karena itu, disarankan untuk:
Support Vector Regression (SVR) merupakan pendekatan regresi dalam ranah machine learning yang dikembangkan dari prinsip-prinsip dasar Support Vector Machine (SVM). Metode ini dirancang untuk menangani prediksi variabel kontinu dengan cara yang lebih fleksibel dan toleran terhadap noise, terutama pada data yang kompleks dan tidak selalu mengikuti pola linear. Berbeda dari metode regresi konvensional yang fokus pada minimisasi total kesalahan prediksi (seperti mean squared error), SVR memperkenalkan mekanisme batas toleransi melalui konsep yang dikenal sebagai ε-tube (epsilon-tube). Pendekatan ini menjadikan SVR sangat efektif dalam menghindari overfitting, dengan cara membiarkan sejumlah kecil kesalahan kecil tidak dikenai penalti, selama masih berada dalam batas toleransi yang wajar.
Salah satu elemen paling khas dalam SVR adalah penggunaan epsilon-tube, yaitu sebuah zona toleransi yang membentuk “selubung” di sekitar fungsi prediksi. Zona ini secara visual dapat dibayangkan sebagai sebuah terowongan dengan lebar tertentu (±ε) yang mengelilingi garis regresi. Di dalam zona ini, kesalahan prediksi dianggap dapat diterima dan tidak dikenakan penalti. Dengan kata lain, epsilon-tube adalah margin fleksibel yang memungkinkan model tetap sederhana dan robust meskipun tidak 100% akurat terhadap semua titik data.
Alih-alih memaksakan prediksi yang presisi pada setiap titik data, SVR bertujuan untuk menemukan fungsi regresi dalam bentuk:
\[ f(x) = \mathbf{w}^\top \mathbf{x} + b \]
yang meminimalkan kompleksitas model (yakni norma dari vektor bobot \(\| \mathbf{w} \|\)) sembari menjaga sebagian besar prediksi tetap berada dalam epsilon-tube. Tujuan utamanya adalah:
Untuk memberikan intuisi yang lebih kuat, bayangkan sebuah “terowongan” atau “tube” yang membentang sepanjang garis prediksi. Ciri-cirinya adalah sebagai berikut:
Dengan pendekatan ini, SVR menjadi solusi regresi yang tidak hanya memperhatikan akurasi, tetapi juga ketahanan model terhadap overfitting, serta kesederhanaan struktur fungsi prediksinya.
Support Vector Regression (SVR) merupakan pengembangan dari algoritma Support Vector Machine (SVM) yang diadaptasi untuk menyelesaikan permasalahan regresi atau prediksi nilai kontinu. Salah satu keunggulan utama SVR terletak pada penerapan epsilon-tube (ε-tube), yaitu zona toleransi yang secara eksplisit dirancang untuk mengendalikan kompleksitas model dan meningkatkan kemampuannya dalam menghadapi data nyata yang penuh dengan variasi tak terduga.
Konsep epsilon-tube bukan sekadar fitur tambahan, melainkan strategi inti yang memungkinkan SVR menyeimbangkan antara ketepatan prediksi dan ketangguhan terhadap gangguan (robustness).
Pada pendekatan regresi tradisional—seperti regresi linier—tujuan utamanya adalah meminimalkan keseluruhan kesalahan prediksi, termasuk kesalahan terkecil sekalipun. Meskipun strategi ini dapat menghasilkan model yang sangat akurat terhadap data pelatihan, ia juga berisiko menangkap noise atau outlier sebagai pola yang sah. Fenomena ini dikenal sebagai overfitting.
SVR mengadopsi filosofi yang berbeda: ia memperkenalkan parameter toleransi ε (epsilon), yang menentukan seberapa besar deviasi antara prediksi dan nilai aktual yang masih dianggap “tidak bermasalah”. Dengan kata lain, kesalahan kecil yang masih berada dalam jangkauan ±ε tidak dihitung sebagai kesalahan yang perlu diperbaiki.
Contoh Kasus: Misalnya, jika nilai aktual suatu data adalah 10 dan model memprediksi 10.3, maka selisih 0.3 masih dianggap dapat diterima selama ε ≥ 0.3. Tidak ada penalti atau upaya penyesuaian berlebihan yang dilakukan terhadap model.
Implikasi:
Dalam praktik nyata, hampir semua data mengandung noise—yakni gangguan acak atau kesalahan pengukuran yang tidak mencerminkan pola sejati dalam fenomena yang diamati. Metode regresi yang terlalu “perfeksionis” berisiko terganggu oleh noise ini, yang justru dapat merusak performa prediktif model secara umum.
SVR menangani hal ini dengan cara yang lebih rasional: selama kesalahan prediksi masih berada dalam margin epsilon, maka model tidak akan menanggapinya sebagai kesalahan yang perlu dikoreksi. Ini berarti bahwa SVR secara eksplisit mengakui dan mengabaikan kesalahan kecil yang bisa saja muncul karena keterbatasan instrumen, faktor eksternal, atau fluktuasi acak.
Contoh Aplikatif: Pada pengukuran suhu udara harian, deviasi sebesar ±0.2°C dari nilai sebenarnya bisa terjadi akibat sensitivitas alat ukur. SVR memahami hal ini dan tidak memaksa model untuk menyesuaikan diri terhadap setiap fluktuasi kecil seperti itu.
Manfaat:
Dengan demikian, penggunaan epsilon-tube pada SVR bukan hanya strategi teknis, tetapi juga filosofi desain model yang lebih bijak: tidak semua kesalahan perlu dikoreksi, dan tidak semua deviasi berarti kesalahan. Pendekatan ini menghasilkan model yang lebih kuat, lebih fleksibel, dan lebih siap menghadapi kompleksitas data dunia nyata.
Salah satu fitur paling menarik dari Support Vector Regression (SVR) adalah efisiensinya dalam memilih titik-titik data yang benar-benar berpengaruh, yang dikenal dengan istilah support vectors. Tidak seperti regresi konvensional yang mempertimbangkan semua data untuk menyesuaikan model, SVR hanya bergantung pada sejumlah kecil titik yang berada di luar margin toleransi (ε-tube).
Secara intuitif, titik-titik yang memiliki kesalahan prediksi lebih besar dari ε akan memengaruhi struktur model secara langsung. Titik-titik inilah yang memaksa model “belajar” dan menyesuaikan diri. Sementara itu, titik-titik yang berada di dalam ε-tube dianggap sudah cukup baik, sehingga tidak memberikan kontribusi terhadap pembaruan parameter model.
Analogi sederhana: Bayangkan SVR seperti seorang guru yang hanya memberikan perhatian kepada siswa yang tertinggal terlalu jauh dari nilai minimum kelulusan (di luar margin ε), bukan kepada seluruh kelas.
Konsekuensi positif dari pendekatan ini:
Posisi suatu titik data terhadap ε-tube sangat menentukan apakah titik tersebut akan dianggap sebagai support vector atau tidak. Dalam kerangka SVR, setiap observasi dapat diklasifikasikan ke dalam tiga kategori berikut:
|yᵢ - f(xᵢ)| < ε
|yᵢ - f(xᵢ)| = ε
|yᵢ - f(xᵢ)| > ε
Berikut adalah contoh implementasi visual SVR dengan ε-tube
menggunakan ggplot2 dan gridExtra:
library(ggplot2)
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.4.3
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
set.seed(260626)
# Data simulasi
x <- seq(0, 10, length.out = 20)
y <- 0.8 * x + rnorm(20, 0, 1)
df <- data.frame(x = x, y = y)
model_ols <- lm(y ~ x, data = df)
df$y_pred <- predict(model_ols)
# Model SVR disederhanakan dengan regresi linear sebagai ilustrasi
model_svr <- lm(y ~ x, data = df)
df$y_svr <- predict(model_svr)
epsilon <- 1
# Tube untuk SVR
tube_df <- data.frame(
x = df$x,
y_min = df$y_svr - epsilon,
y_max = df$y_svr + epsilon
)
# Plot OLS
p1 <- ggplot(df, aes(x, y)) +
geom_point() +
geom_abline(intercept = coef(model_ols)[1], slope = coef(model_ols)[2], linetype = "dotted") +
geom_segment(aes(xend = x, yend = y_pred), color = "darkgreen", linetype = "dashed") +
labs(title = "Ordinary Least Squares", y = "Y", x = "X") +
theme_bw()
# Plot SVR
p2 <- ggplot(df, aes(x, y)) +
geom_point() +
geom_ribbon(data = tube_df, aes(ymin = y_min, ymax = y_max), fill = "yellow", alpha = 0.4) +
geom_line(aes(y = y_svr), linetype = "dotted") +
geom_hline(yintercept = df$y_svr[1] + epsilon, linetype = "dashed", color = "gray") +
geom_hline(yintercept = df$y_svr[1] - epsilon, linetype = "dashed", color = "gray") +
labs(title = expression(paste(epsilon, "-Insensitive Tube")), y = "Y", x = "X") +
theme_bw()
# Gabungkan dua plot
grid.arrange(p1, p2, ncol = 2)
Dengan memperkenalkan margin toleransi kesalahan (ε-tube), SVR menyusun model regresi yang:
Dengan kombinasi prinsip-prinsip ini, SVR memberikan keseimbangan antara fleksibilitas dan ketegasan dalam proses pembelajaran, serta menghasilkan model yang andal, interpretatif, dan generalisable.
Dalam konteks Support Vector Regression (SVR), sering kali muncul dua istilah yang tampak mirip namun memiliki makna dan fungsi yang berbeda: margin dan tube. Memahami perbedaan keduanya penting untuk benar-benar menguasai intuisi di balik kerja SVR.
Pada klasifikasi dengan Support Vector Machine (SVM), margin merujuk pada jarak antara dua hyperplane pemisah kelas—yakni batas atas dan bawah—yang menjepit decision boundary. Tujuan dari SVM adalah memaksimalkan margin, karena semakin besar margin, semakin besar pula generalisasi model terhadap data tak terlihat (unseen data).
Sementara itu, dalam Support Vector Regression, istilah yang lebih tepat adalah epsilon-insensitive tube atau cukup disebut ε-tube. Tube ini merupakan zona toleransi di sekitar fungsi regresi (fungsi prediksi) di mana kesalahan hingga sebesar ε tidak dianggap sebagai pelanggaran atau penalti. Artinya, selama prediksi jatuh di dalam ε-tube, maka SVR tidak menghitungnya sebagai kesalahan.
| Aspek | SVM (Margin) | SVR (Tube) |
|---|---|---|
| Tujuan utama | Memisahkan kelas secara maksimal | Mengaproksimasi fungsi target dengan toleransi error |
| Struktur | Dua hyperplane sejajar (margin) | Dua batas horizontal sejajar fungsi regresi (tube) |
| Peran data di luar | Kontribusi terhadap fungsi biaya (loss) | Kontribusi terhadap fungsi biaya (loss) |
| Peran data di dalam | Tidak berpengaruh terhadap model | Tidak dihitung sebagai kesalahan |
| Istilah umum digunakan | Margin maximization | Epsilon-insensitive loss |
Walaupun secara geometrik margin dan tube sama-sama melibatkan jarak dari fungsi pusat (baik garis klasifikasi maupun regresi), fungsinya berbeda. Margin dalam SVM adalah upaya untuk menghindari ambiguitas dalam klasifikasi, sedangkan tube dalam SVR adalah bentuk toleransi terhadap noise atau kesalahan kecil. Tube memungkinkan SVR untuk fokus hanya pada data yang benar-benar menyimpang dari tren umum, sehingga lebih robust terhadap fluktuasi kecil dan noise.
Dalam machine learning, setiap model menghadapi dilema klasik: bias vs variance trade-off. Parameter epsilon (ε) dalam SVR memainkan peran penting dalam menyeimbangkan dua aspek ini.
Epsilon (ε) dalam SVR adalah ambang batas toleransi kesalahan. Ia mendefinisikan seberapa besar kesalahan prediksi yang masih dapat diterima tanpa dikenakan penalti.
Epsilon Kecil (ε → 0):
Epsilon Besar (ε → besar):
ε kecil → model mengikuti data dengan ketat → overfitting (variance ↑)
ε besar → model menghaluskan fluktuasi kecil → underfitting (bias ↑)
Pemilihan nilai ε sangat menentukan kualitas generalisasi model SVR. Oleh karena itu, perlu dilakukan:
Dalam praktiknya, pemilihan nilai ε sering dilakukan bersamaan dengan parameter lain seperti C (penalti kesalahan) dan kernel.
Parameter epsilon dalam SVR bukan sekadar angka toleransi; ia adalah mekanisme kontrol yang sangat efektif untuk menjembatani konflik antara bias dan variansi. Dengan mengatur seberapa banyak kesalahan yang dapat diterima, epsilon membantu kita menyusun model yang cukup fleksibel untuk menangkap pola, tetapi juga cukup kaku untuk tidak terlalu memanjakan noise.
Dalam Support Vector Regression (SVR), support vectors adalah titik-titik data yang secara langsung memengaruhi pembentukan model regresi. Mereka bukan sekadar data observasi, melainkan representasi dari kasus-kasus kritis di mana model harus “belajar” karena kesalahannya signifikan terhadap tujuan optimasi.
Support vectors dalam konteks SVR dapat dikenali melalui karakteristik berikut:
Salah satu keunikan SVR adalah penggunaan ε-insensitive loss, di mana hanya kesalahan di luar ε yang dikenai penalti. Artinya:
Jika sebuah prediksi masih berada dalam jarak toleransi ε terhadap nilai sebenarnya, maka:
\[ |yᵢ - f(xᵢ)| \leq \epsilon \]
…maka titik tersebut tidak dihitung sebagai kesalahan.
Misalkan model regresi SVR adalah:
\[ f(x) = x + 1 \]
Dan ε = 0.1. Maka:
Titik (2, 3.05)
Titik (2, 3.5)
Titik-titik di luar ε-tube — baik yang menyentuh batas atau benar-benar melampaui — adalah inti dari pembelajaran SVR. Mereka adalah satu-satunya titik yang “diperhatikan” oleh model karena memuat informasi penting tentang pelanggaran terhadap toleransi prediksi. Dengan mengabaikan kesalahan kecil dan hanya memperhitungkan penyimpangan besar, SVR menjadi model yang lebih tahan terhadap noise dan lebih fokus dalam mengenali pola sebenarnya dalam data.
Support Vector Regression bukan sekadar model prediktif, tetapi juga merupakan pendekatan matematis yang elegan dalam menangani masalah regresi dengan mempertimbangkan ketidaksempurnaan data.
SVR berusaha membangun fungsi regresi linier:
\[ f(x) = w^T x + b \]
…dengan tiga tujuan utama yang saling mengimbangi:
Kesederhanaan model:
Toleransi terhadap kesalahan kecil:
Kesalahan dalam rentang ±ε dianggap tidak signifikan dan tidak dikenai penalti. Ini ditangani melalui ε-insensitive loss function:
\[ L_{\epsilon}(y, f(x)) = \begin{cases} 0 & \text{jika } |y - f(x)| \leq \epsilon \\ |y - f(x)| - \epsilon & \text{jika } |y - f(x)| > \epsilon \end{cases} \]
Penalti terhadap kesalahan besar:
SVR menyelesaikan permasalahan berikut:
\[ \min_{w, b, \xi, \xi^*} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^{n} (\xi_i + \xi^*_i) \]
Dengan kendala:
\[ \begin{cases} y_i - w^T x_i - b \leq \epsilon + \xi_i \\ w^T x_i + b - y_i \leq \epsilon + \xi^*_i \\ \xi_i, \xi^*_i \geq 0 \end{cases} \]
Di sini:
SVR bukan hanya model regresi biasa. Ia menciptakan keseimbangan yang kuat antara:
Dengan memahami dasar matematisnya, kita tidak hanya tahu cara menggunakan SVR — tetapi juga mengapa dan kapan SVR menjadi pilihan terbaik dalam regresi dunia nyata.
Support Vector Regression (SVR) merupakan ekstensi dari Support Vector Machine (SVM) untuk kasus regresi. Pendekatannya unik karena tidak hanya berfokus pada minimisasi kesalahan prediksi, melainkan juga mempertimbangkan toleransi kesalahan dan kompleksitas model. Ada tiga pilar utama yang membentuk formulasi SVR: regularisasi, margin toleransi (ε), dan penalti terhadap pelanggaran.
SVR memodelkan fungsi regresi linear dalam bentuk:
\[ f(x) = \mathbf{w}^T\mathbf{x} + b \]
Tujuan utama dari SVR adalah menghasilkan model yang sederhana dan general, yakni model yang tidak terlalu sensitif terhadap fluktuasi data pelatihan yang mungkin mengandung noise.
Konsep kesederhanaan dalam SVR diukur melalui norma vektor bobot \(||\mathbf{w}||\). Semakin kecil nilai \(||\mathbf{w}||\), semakin datar (smooth) garis regresi yang dihasilkan. Hal ini mencegah model melakukan overfitting, yaitu belajar terlalu detail terhadap data pelatihan sehingga kehilangan kemampuan generalisasi.
Regularisasi ini secara matematis diformulasikan dalam fungsi objektif sebagai:
\[ \min \frac{1}{2} ||\mathbf{w}||^2 \]
Regularisasi berperan penting dalam:
Tidak seperti regresi linear biasa yang menghukum semua kesalahan secara langsung, SVR menggunakan pendekatan ε-insensitive loss, yang hanya memberikan penalti terhadap kesalahan yang melebihi margin toleransi \(\epsilon\).
Jika prediksi model berada dalam jarak \(\epsilon\) dari nilai aktual (yakni: \(|y_i - f(x_i)| \leq \epsilon\)), maka kesalahan tersebut diabaikan. Ini berarti SVR mentoleransi kesalahan kecil yang dianggap tidak signifikan, memberikan ruang bagi model untuk menghindari overfitting terhadap fluktuasi kecil.
\[ L_{\epsilon}(y, f(x)) = \begin{cases} 0 & \text{jika } |y - f(x)| \leq \epsilon \\ |y - f(x)| - \epsilon & \text{jika } |y - f(x)| > \epsilon \end{cases} \]
Ketika kesalahan prediksi melampaui batas toleransi \(\epsilon\), SVR akan mengenakan penalti linier. Untuk mengakomodasi pelanggaran ini, diperkenalkan variabel slack \(\xi_i\) dan \(\xi^*_i\), yang merepresentasikan jarak pelanggaran terhadap batas tube.
Penalti secara matematis dimasukkan ke dalam fungsi objektif sebagai:
\[ C \sum_{i=1}^n (\xi_i + \xi^*_i) \]
Interpretasi parameter C:
\[ \min_{\mathbf{w}, b, \xi, \xi^*} \frac{1}{2} ||\mathbf{w}||^2 + C \sum_{i=1}^{n} (\xi_i + \xi^*_i) \]
Dengan syarat:
\[ \begin{aligned} y_i - (\mathbf{w}^T x_i + b) &\leq \epsilon + \xi_i \\ (\mathbf{w}^T x_i + b) - y_i &\leq \epsilon + \xi^*_i \\ \xi_i, \xi^*_i &\geq 0 \end{aligned} \]
| Aspek | Regularisasi (\(\frac{1}{2} \|\mathbf{w}\|^2\)) | Penalti (\(C \sum_{i=1}^{n} (\xi_i + \xi_i^*)\)) |
|---|---|---|
| Tujuan | Mengendalikan kompleksitas model untuk mencegah overfitting | Mengontrol pelanggaran terhadap margin toleransi \(\varepsilon\) |
| Efek | Menyederhanakan fungsi prediksi dengan bobot kecil | Memastikan deviasi terhadap margin dihukum secara proporsional |
| Peran dalam Model | Berfungsi sebagai batas regularisasi dalam fungsi objektif | Menambahkan penalti pada kesalahan yang melebihi margin \(\varepsilon\) |
| Parameter Kontrol | Tidak langsung dikontrol (implisit melalui kernel/struktur) | Dikendalikan oleh parameter \(C\) untuk menyeimbangkan fleksibilitas dan kesalahan |
library(e1071)
library(ggplot2)
set.seed(260626)
# Data simulasi
x <- seq(0, 10, length.out = 100)
y <- 0.5 * x + 2 + rnorm(100, sd = 0.3)
df <- data.frame(x = x, y = y)
# Model SVR dengan C kecil
model_smallC <- svm(y ~ x, data = df, type = "eps-regression", cost = 0.1, epsilon = 0.2)
df$pred_smallC <- predict(model_smallC, df)
# Model SVR dengan C besar
model_largeC <- svm(y ~ x, data = df, type = "eps-regression", cost = 100, epsilon = 0.2)
df$pred_largeC <- predict(model_largeC, df)
# Visualisasi hasil
ggplot(df, aes(x = x)) +
geom_point(aes(y = y), color = "gray60", alpha = 0.6) +
geom_line(aes(y = pred_smallC), color = "blue", linewidth = 1.2, linetype = "dashed") +
geom_line(aes(y = pred_largeC), color = "red", linewidth = 1.2) +
labs(title = "Pengaruh Nilai C dalam SVR",
subtitle = "Garis Merah: C besar (lebih kaku) | Garis Biru Putus-putus: C kecil (lebih fleksibel)",
y = "y", x = "x") +
theme_bw()
Model dengan C kecil (biru putus-putus): Lebih fleksibel, toleran terhadap kesalahan kecil, dan cenderung tidak memaksakan diri untuk mengikuti outlier atau fluktuasi ekstrem.
Model dengan C besar (garis merah): Lebih kaku dan agresif dalam memperbaiki kesalahan prediksi di luar ϵ-tube, bahkan jika itu berarti menghasilkan model yang lebih kompleks dan berisiko overfitting.
Support Vector Regression memadukan kekuatan regularisasi, toleransi kesalahan, dan kontrol penalti untuk membangun model regresi yang tidak hanya akurat terhadap data pelatihan, tetapi juga mampu beradaptasi secara bijak terhadap noise dan menggeneralisasi dengan baik pada data baru. Kombinasi ini menjadikan SVR sebagai pilihan yang kuat dalam regresi berbasis margin dan kernel.
Dalam konteks regresi menggunakan Support Vector Regression (SVR), kita diberikan sekumpulan data pelatihan berupa pasangan \((\mathbf{x}_i, y_i)\), untuk \(i = 1, \dots, n\). Tujuan utama adalah membangun sebuah fungsi regresi linear:
\[ f(\mathbf{x}) = \mathbf{w}^\top \mathbf{x} + b \]
yang tidak hanya mampu melakukan prediksi \(y_i\) sedekat mungkin, tetapi juga mempertahankan kompleksitas model seminimal mungkin.
SVR mengadopsi pendekatan ε-insensitive loss, di mana kesalahan prediksi yang berada dalam batas toleransi \(\epsilon\) tidak dikenakan penalti. Untuk kasus di mana kesalahan prediksi melebihi margin tersebut, kita memperkenalkan dua jenis variabel kelonggaran (slack variables) yaitu \(\xi_i\) dan \(\xi_i^*\). Kedua variabel ini mengukur seberapa jauh titik data menyimpang dari batas toleransi tersebut, baik di atas maupun di bawah garis regresi.
Dengan demikian, fungsi objektif SVR (soft margin ε-insensitive) diformulasikan sebagai berikut:
\[ \min_{\mathbf{w}, b, \xi_i, \xi_i^*} \quad \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^{n} (\xi_i + \xi_i^*) \]
dengan kendala:
\[ \begin{cases} y_i - \mathbf{w}^\top \mathbf{x}_i - b \leq \epsilon + \xi_i \\ \mathbf{w}^\top \mathbf{x}_i + b - y_i \leq \epsilon + \xi_i^* \\ \xi_i, \xi_i^* \geq 0 \end{cases} \]
Melalui formulasi ini, SVR berusaha mencari model yang halus namun tetap robust, dengan tidak terlalu sensitif terhadap fluktuasi kecil pada data pelatihan.
Untuk menyelesaikan masalah optimisasi terikat yang dijelaskan sebelumnya, digunakan pendekatan Lagrangian, yaitu teknik umum dalam optimisasi terikat yang memungkinkan kita mengubah masalah dengan kendala menjadi bentuk tanpa kendala melalui penambahan Lagrange multipliers.
Setiap kendala dalam fungsi objektif akan dikaitkan dengan Lagrange multiplier sebagai berikut:
| Kendala | Lagrange Multiplier |
|---|---|
| \(y_i - (\mathbf{w}^\top \mathbf{x}_i + b) \leq \epsilon + \xi_i\) | \(\alpha_i \geq 0\) |
| \((\mathbf{w}^\top \mathbf{x}_i + b) - y_i \leq \epsilon + \xi_i^*\) | \(\alpha_i^* \geq 0\) |
| \(\xi_i \geq 0\) | \(\eta_i \geq 0\) |
| \(\xi_i^* \geq 0\) | \(\eta_i^* \geq 0\) |
Lagrange multipliers ini bertindak sebagai “hukuman” terhadap pelanggaran kendala dan memungkinkan kita menerapkan Karush-Kuhn-Tucker (KKT) conditions, yaitu kondisi optimalitas yang sangat penting dalam teori optimisasi konveks.
Dengan menggabungkan fungsi objektif dan kendala melalui Lagrange multipliers, kita mendapatkan bentuk fungsi Lagrangian sebagai berikut:
\[ \begin{aligned} L(\mathbf{w}, b, \xi, \xi^*, \alpha, \alpha^*, \eta, \eta^*) =\ & \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^{n} (\xi_i + \xi_i^*) \\ & - \sum_{i=1}^{n} \alpha_i (\epsilon + \xi_i - y_i + \mathbf{w}^\top \mathbf{x}_i + b) \\ & - \sum_{i=1}^{n} \alpha_i^* (\epsilon + \xi_i^* + y_i - \mathbf{w}^\top \mathbf{x}_i - b) \\ & - \sum_{i=1}^{n} \eta_i \xi_i - \sum_{i=1}^{n} \eta_i^* \xi_i^* \end{aligned} \]
Pendekatan ini adalah titik awal untuk melakukan transformasi ke dual formulation, yang membuka jalan bagi penggunaan kernel dalam SVR. Dengan kata lain, Lagrangian tidak hanya menyederhanakan masalah optimisasi, tetapi juga memungkinkan SVR untuk menangani hubungan non-linear antara fitur dan target melalui teknik kernel trick — bagian yang sangat penting dalam aplikasi praktis SVR untuk data dunia nyata.
Support Vector Regression (SVR) tidak hanya bertujuan membentuk fungsi regresi yang akurat, tetapi juga menyusun formulasi matematis yang efisien secara komputasional. Dalam SVR, kita memulai dengan formulasi primal dan kemudian mengubahnya ke bentuk dual melalui pendekatan Lagrangian. Proses ini krusial karena memungkinkan penggunaan teknik kernel dan efisiensi numerik.
Masalah regresi dalam SVR melibatkan tiga aspek utama:
Untuk menyelesaikan masalah ini secara sistematik dan efisien, kita menempuh dua tahap formulasi:
Formulasi primal adalah bentuk awal dari masalah optimisasi SVR, yang mencakup variabel langsung seperti:
Tujuan utama dari formulasi ini adalah:
Namun, menyelesaikan formulasi primal secara langsung sering kali tidak efisien, terutama ketika data memiliki dimensi tinggi.
Untuk mendapatkan solusi optimal dari formulasi primal, kita gunakan prinsip kondisi optimalitas KKT (Karush-Kuhn-Tucker). Kita hitung turunan parsial dari fungsi Lagrangian dan menyamakannya dengan nol:
\[ \frac{\partial L}{\partial \mathbf{w}} = \mathbf{w} - \sum_{i=1}^n (\alpha_i - \alpha_i^*) \mathbf{x}_i = 0 \quad \Rightarrow \quad \mathbf{w} = \sum_{i=1}^n (\alpha_i - \alpha_i^*) \mathbf{x}_i \]
\[ \frac{\partial L}{\partial b} = \sum_{i=1}^n (\alpha_i - \alpha_i^*) = 0 \]
\[ \frac{\partial L}{\partial \xi_i} = C - \alpha_i - \eta_i = 0 \quad \Rightarrow \quad \alpha_i \leq C \]
\[ \frac{\partial L}{\partial \xi_i^*} = C - \alpha_i^* - \eta_i^* = 0 \quad \Rightarrow \quad \alpha_i^* \leq C \]
Dari hasil turunan ini, kita dapat menyusun bentuk dual secara penuh.
Dengan mensubstitusikan \(\mathbf{w}\) dan \(b\) ke dalam fungsi Lagrangian, kita memperoleh bentuk fungsi objektif dalam formulasi dual sebagai berikut:
\[ \max_{\alpha_i, \alpha_i^*} \quad -\frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n (\alpha_i - \alpha_i^*)(\alpha_j - \alpha_j^*) \langle \mathbf{x}_i, \mathbf{x}_j \rangle - \epsilon \sum_{i=1}^n (\alpha_i + \alpha_i^*) + \sum_{i=1}^n y_i (\alpha_i - \alpha_i^*) \]
dengan kendala:
\[ \sum_{i=1}^n (\alpha_i - \alpha_i^*) = 0, \quad 0 \leq \alpha_i, \alpha_i^* \leq C \]
Transformasi dari primal ke dual tidak hanya mempermudah proses komputasi, tetapi juga membuka jalan bagi penerapan kernel trick. Ini yang membuat SVR sangat fleksibel dan powerful dalam menangani berbagai bentuk regresi, baik linier maupun non-linear.
Setelah proses optimisasi dual selesai, kita memperoleh dua himpunan parameter penting: \(\alpha_i\) dan \(\alpha_i^*\). Berdasarkan hasil ini, kita dapat membentuk vektor bobot sebagai:
\[ \mathbf{w} = \sum_{i=1}^{n} (\alpha_i - \alpha_i^*) \mathbf{x}_i \]
Dengan vektor bobot \(\mathbf{w}\), fungsi prediksi dalam Support Vector Regression (SVR) dinyatakan sebagai:
\[ f(\mathbf{x}) = \sum_{i=1}^{n} (\alpha_i - \alpha_i^*) \langle \mathbf{x}_i, \mathbf{x} \rangle + b \]
Vektor \(\mathbf{w}\) merepresentasikan kontribusi gabungan dari masing-masing data latih terhadap model regresi. Tidak seperti regresi linier biasa, bobot dalam SVR tidak dihitung secara langsung dari data, melainkan diperoleh melalui solusi optimasi dual—yakni melalui pasangan parameter \(\alpha_i\) dan \(\alpha_i^*\).
Notasi \(\langle \mathbf{x}_i, \mathbf{x} \rangle\) menyatakan inner product (atau dot product) antara vektor fitur dari data latih ke-\(i\) dan vektor input baru \(\mathbf{x}\) yang ingin diprediksi. Inner product ini merepresentasikan tingkat kemiripan antara dua vektor dalam ruang input.
Nilai \(b\) adalah bias, yang dihitung berdasarkan kondisi optimalitas (KKT conditions), dan berfungsi sebagai penyesuaian global dalam fungsi prediksi.
Dengan rumus di atas, SVR menghasilkan prediksi berdasarkan kontribusi data-data support vector, yaitu titik-titik data yang memiliki nilai \(\alpha_i - \alpha_i^* \neq 0\). Titik-titik ini berada di luar margin epsilon dan sangat berperan dalam membentuk garis (atau permukaan) regresi akhir.
Support Vector Regression tidak terbatas pada relasi linier antara variabel input dan output. Untuk menangani hubungan non-linier, SVR menggunakan pendekatan yang dikenal sebagai kernel trick.
Dalam bentuk dasarnya, SVR linier hanya mampu memodelkan hubungan linear:
\[ f(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + b \]
Namun dalam praktiknya, banyak fenomena nyata menunjukkan hubungan non-linier. Untuk mengatasi ini, data input dapat ditransformasikan terlebih dahulu ke ruang fitur berdimensi lebih tinggi melalui suatu fungsi \(\phi(\mathbf{x})\), sehingga model menjadi:
\[ f(\mathbf{x}) = \mathbf{w}^T \phi(\mathbf{x}) + b \]
Masalahnya, menghitung \(\phi(\mathbf{x})\) secara eksplisit sangat mahal secara komputasi, terutama untuk dimensi ruang fitur yang sangat tinggi atau bahkan tak hingga.
Kernel trick menawarkan solusi elegan. Daripada menghitung \(\phi(\mathbf{x})\) secara eksplisit, kita cukup menghitung inner product dalam ruang fitur dengan menggunakan fungsi kernel:
\[ K(\mathbf{x}_i, \mathbf{x}_j) = \langle \phi(\mathbf{x}_i), \phi(\mathbf{x}_j) \rangle \]
Dengan demikian, semua perhitungan tetap dilakukan dalam ruang input asli, tetapi seolah-olah data telah diproyeksikan ke ruang fitur yang lebih kompleks. Hal ini memungkinkan SVR untuk menangkap pola-pola non-linier tanpa biaya transformasi eksplisit.
Berikut beberapa fungsi kernel yang sering digunakan dalam praktik SVR:
Linear Kernel:
\[ K(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i^T \mathbf{x}_j \]
Polynomial Kernel:
\[ K(\mathbf{x}_i, \mathbf{x}_j) = (\gamma \mathbf{x}_i^T \mathbf{x}_j + r)^d \]
Radial Basis Function (RBF) / Gaussian Kernel:
\[ K(\mathbf{x}_i, \mathbf{x}_j) = \exp(-\gamma \| \mathbf{x}_i - \mathbf{x}_j \|^2) \]
Sigmoid Kernel:
\[ K(\mathbf{x}_i, \mathbf{x}_j) = \tanh(\gamma \mathbf{x}_i^T \mathbf{x}_j + r) \]
Di mana \(\gamma\), \(r\), dan \(d\) adalah parameter yang dapat disesuaikan berdasarkan kebutuhan.
Kernel RBF (Gaussian) sangat populer karena kemampuannya menghasilkan model yang sangat fleksibel dan mampu menangani variasi lokal data. Intuisinya adalah:
Dengan demikian, kernel RBF memungkinkan SVR untuk “menyulap” pola non-linier menjadi linier secara lokal, tanpa perlu secara eksplisit memahami bentuk non-linier tersebut.
mtcarslibrary(e1071) # Implementasi SVM/SVR
library(caret) # Preprocessing dan evaluasi model
library(ggplot2) # Visualisasi data
library(dplyr) # Manipulasi data
library(Metrics) # Evaluasi model: MAE, RMSE
Beberapa library yang digunakan:
e1071: menyediakan fungsi svm() untuk
membangun model SVR.caret: mempermudah proses split data, prapemrosesan,
dan evaluasi model.ggplot2: digunakan untuk eksplorasi visual dan plotting
hasil prediksi.dplyr: untuk transformasi dan seleksi data.Metrics: menyediakan fungsi evaluasi seperti MAE (Mean
Absolute Error) dan RMSE (Root Mean Squared Error).data("mtcars") # Dataset bawaan R
df <- mtcars %>%
select(mpg, hp) %>% # Pilih dua variabel
rename(Target = mpg, Feature = hp) # Ganti nama kolom
head(df)
## Target Feature
## Mazda RX4 21.0 110
## Mazda RX4 Wag 21.0 110
## Datsun 710 22.8 93
## Hornet 4 Drive 21.4 110
## Hornet Sportabout 18.7 175
## Valiant 18.1 105
Dalam studi kasus ini, digunakan dua variabel:
mpg — mil per galon
(efisiensi bahan bakar).hp — horsepower (daya
mesin).Variabel diubah namanya untuk meningkatkan kejelasan dan keterbacaan saat pemodelan.
Sebelum membangun model SVR, penting untuk melakukan standarisasi atau normalisasi fitur. SVR—terutama yang menggunakan kernel seperti RBF—sangat sensitif terhadap perbedaan skala antar variabel karena melibatkan perhitungan jarak (misalnya, dalam fungsi kernel Gaussian).
Proses standarisasi dilakukan dengan z-score normalization:
\[ x_{\text{scaled}} = \frac{x - \bar{x}}{\sigma} \]
Berikut adalah implementasinya:
df_scaled <- df %>%
mutate(across(everything(), scale)) # Standarisasi semua kolom
summary(df_scaled)
## Target.V1 Feature.V1
## Min. :-1.6078826 Min. :-1.3810318
## 1st Qu.:-0.7741273 1st Qu.:-0.7319924
## Median :-0.1477738 Median :-0.3454858
## Mean : 0.0000000 Mean : 0.0000000
## 3rd Qu.: 0.4495434 3rd Qu.: 0.4858679
## Max. : 2.2912716 Max. : 2.7465668
Menyeimbangkan Skala Fitur: Variabel dengan skala besar dapat mendominasi perhitungan jarak antar titik, sehingga membuat model bias terhadap fitur tertentu. Dengan standarisasi, kontribusi tiap fitur menjadi setara.
Meningkatkan Stabilitas Algoritma Optimisasi: SVR melibatkan optimisasi fungsi objektif (melalui metode dual). Ketika fitur tidak diskalakan, solver bisa mengalami kesulitan untuk konvergen secara efisien dan akurat.
Mempermudah Interpretasi Model (untuk SVR linier): Dalam model linier, koefisien hasil regresi dapat dibandingkan langsung ketika fitur telah memiliki distribusi yang seragam.
Proses standarisasi harus dilakukan hanya pada data latih, dan kemudian mean serta standar deviasi dari data latih digunakan untuk mentransformasikan data uji. Hal ini penting agar informasi dari data uji tidak ‘bocor’ ke proses pelatihan.
Jika menggunakan paket seperti caret, hal ini dapat
diatur otomatis melalui argumen preProcess.
set.seed(260626) # Reproducibility
train_index <- createDataPartition(df_scaled$Target, p = 0.8, list = FALSE)
train_data <- df_scaled[train_index, ]
test_data <- df_scaled[-train_index, ]
Dataset dibagi menjadi dua bagian:
Pembagian ini bertujuan untuk menghindari overfitting serta memberikan estimasi kinerja model yang realistis terhadap data baru.
model_lm <- lm(Target ~ Feature, data = train_data)
summary(model_lm)
##
## Call:
## lm(formula = Target ~ Feature, data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.9140 -0.2948 -0.1301 0.2352 1.4034
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.02646 0.11358 0.233 0.818
## Feature -0.72297 0.11310 -6.392 9.02e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6002 on 26 degrees of freedom
## Multiple R-squared: 0.6111, Adjusted R-squared: 0.5962
## F-statistic: 40.86 on 1 and 26 DF, p-value: 9.02e-07
pred_lm <- predict(model_lm, newdata = test_data)
rmse_lm <- rmse(test_data$Target, pred_lm)
mae_lm <- mae(test_data$Target, pred_lm)
r2_lm <- R2(pred_lm, test_data$Target)
Sebagai model pembanding (baseline), digunakan regresi linier
sederhana (OLS). Model ini mengasumsikan hubungan linier antara
variabel Feature dan Target. Evaluasi
dilakukan menggunakan tiga metrik utama:
Nilai-nilai ini akan digunakan sebagai pembanding untuk model SVR.
model_svr_linear <- svm(
Target ~ Feature,
data = train_data,
kernel = "linear",
epsilon = 0.1,
cost = 1
)
pred_svr_linear <- predict(model_svr_linear, newdata = test_data)
rmse_linear <- rmse(test_data$Target, pred_svr_linear)
mae_linear <- mae(test_data$Target, pred_svr_linear)
r2_linear <- R2(pred_svr_linear, test_data$Target)
Model SVR dengan kernel linear merupakan bentuk dasar dari Support Vector Regression. Karakteristiknya:
epsilon (ε): Mengontrol zona margin
bebas penalti di sekitar garis prediksi. Titik data dalam margin tidak
dikenai penalti.cost (C): Mengontrol toleransi
terhadap kesalahan. Nilai C yang besar membuat model
cenderung overfitting; nilai kecil membuat model lebih toleran terhadap
deviasi kecil.Model ini cocok jika hubungan antara variabel prediktor dan target diperkirakan bersifat linier.
model_svr_rbf <- svm(
Target ~ Feature,
data = train_data,
kernel = "radial",
epsilon = 0.1,
cost = 1,
gamma = 0.5
)
pred_svr_rbf <- predict(model_svr_rbf, newdata = test_data)
rmse_rbf <- rmse(test_data$Target, pred_svr_rbf)
mae_rbf <- mae(test_data$Target, pred_svr_rbf)
r2_rbf <- R2(pred_svr_rbf, test_data$Target)
Model ini menggunakan kernel Radial Basis Function
(RBF) untuk memodelkan hubungan non-linier antara
Feature dan Target. Kelebihannya:
gamma (γ): Menentukan seberapa jauh
pengaruh satu titik data menyebar. Nilai kecil → pengaruh lebih global,
nilai besar → pengaruh lebih lokal.Model RBF sering menjadi default pilihan dalam SVR karena fleksibilitasnya dalam menyesuaikan bentuk fungsi regresi terhadap data.
Evaluasi performa model merupakan tahapan krusial dalam proses pemodelan prediktif. Tujuannya adalah menilai seberapa baik model mampu menangkap pola data dan memprediksi nilai target dengan akurat pada data yang belum pernah dilihat sebelumnya.
Pada bagian ini, kita membandingkan tiga model regresi yang telah dibangun:
Ketiga model dievaluasi menggunakan metrik regresi umum:
RMSE (Root Mean Squared Error) Mengukur deviasi prediksi terhadap nilai aktual dalam satuan asli target. Bersifat sensitif terhadap outlier karena penalti terhadap error besar lebih tinggi.
MAE (Mean Absolute Error) Rata-rata kesalahan absolut. Lebih robust terhadap pencilan karena tidak mengkuadratkan selisih.
R² (Koefisien Determinasi) Mengukur proporsi variabilitas target yang dapat dijelaskan oleh model. Nilai mendekati 1 menunjukkan kualitas prediksi yang tinggi.
metrics <- data.frame(
Model = c("OLS", "SVR Linear", "SVR RBF"),
RMSE = c(rmse_lm, rmse_linear, rmse_rbf),
MAE = c(mae_lm, mae_linear, mae_rbf),
R2 = c(r2_lm, r2_linear, r2_rbf)
)
knitr::kable(metrics, caption = "Tabel Perbandingan Performansi Model Regresi pada Data Uji")
| Model | RMSE | MAE | R2 |
|---|---|---|---|
| OLS | 0.8759779 | 0.7942395 | 0.8311531 |
| SVR Linear | 0.8951931 | 0.7464583 | 0.8311531 |
| SVR RBF | 0.7521234 | 0.6412627 | 0.9053028 |
SVR dengan Kernel RBF memberikan performa terbaik:
Regresi Linier dan SVR Linear menunjukkan performa serupa:
Perbedaan kinerja yang signifikan antara model linier dan non-linier menunjukkan bahwa relasi antara variabel tidak sepenuhnya linier, sehingga pendekatan kernel sangat membantu dalam meningkatkan akurasi.
Visualisasi berikut memberikan pemahaman intuitif terhadap cara kerja SVR Linear, khususnya konsep epsilon-tube yang menjadi fondasi dari fungsi kerugian (loss function) dalam Support Vector Regression:
ggplot(train_data, aes(x = Feature, y = Target)) +
geom_point(color = "steelblue", size = 3) +
geom_line(aes(y = predict(model_svr_linear, train_data)), color = "red", size = 1.2) +
geom_line(aes(y = predict(model_svr_linear, train_data) + 0.1),
linetype = "dashed", color = "darkgreen") +
geom_line(aes(y = predict(model_svr_linear, train_data) - 0.1),
linetype = "dashed", color = "darkgreen") +
labs(
title = "SVR Linear: Visualisasi Hyperplane dan Epsilon-Tube (ε = ±0.1)",
x = "Horsepower (Feature)",
y = "MPG (Target)"
) +
theme_minimal(base_size = 13)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Garis Merah (Prediksi Model SVR) Menunjukkan hyperplane atau garis prediksi yang dihasilkan oleh SVR linear.
Garis Putus-Putus Hijau (Epsilon-Tube) Batas
atas dan bawah dari zona toleransi (±epsilon) di mana
kesalahan prediksi tidak dikenakan penalti. Ini mencerminkan
epsilon-insensitive loss, khas dari SVR.
Titik Biru (Data Latih) Data asli. Titik-titik di luar zona hijau merupakan support vectors — yakni data yang menentukan posisi optimal hyperplane karena melampaui margin epsilon.
Visualisasi ini memperjelas prinsip SVR linear sebagai kompromi optimal antara simplicity (garis linier) dan toleransi kesalahan (epsilon-insensitivity).
Model SVR dengan kernel RBF memerlukan pemilihan hyperparameter yang cermat untuk menghindari overfitting maupun underfitting. Tiga parameter utama yang perlu disetel:
epsilon (ε): Ukuran margin bebas
penalti.cost (C): Penalti terhadap pelanggaran
margin.gamma: Parameter kernel RBF yang
mengontrol kompleksitas model (besarnya pengaruh tiap data terhadap
prediksi).tune()set.seed(123)
tuned <- tune(
svm,
Target ~ Feature,
data = train_data,
kernel = "radial",
ranges = list(
epsilon = c(0.1, 0.2, 0.3),
cost = c(0.1, 1, 10),
gamma = c(0.1, 0.5, 1)
)
)
summary(tuned)
##
## Parameter tuning of 'svm':
##
## - sampling method: 10-fold cross validation
##
## - best parameters:
## epsilon cost gamma
## 0.2 10 0.1
##
## - best performance: 0.262275
##
## - Detailed performance results:
## epsilon cost gamma error dispersion
## 1 0.1 0.1 0.1 0.6954054 0.7278891
## 2 0.2 0.1 0.1 0.6832580 0.7309021
## 3 0.3 0.1 0.1 0.7335557 0.7749567
## 4 0.1 1.0 0.1 0.3582354 0.4311779
## 5 0.2 1.0 0.1 0.3657534 0.4485988
## 6 0.3 1.0 0.1 0.3453682 0.4109137
## 7 0.1 10.0 0.1 0.2748831 0.2836492
## 8 0.2 10.0 0.1 0.2622750 0.2781861
## 9 0.3 10.0 0.1 0.2921392 0.2942016
## 10 0.1 0.1 0.5 0.5763221 0.6383692
## 11 0.2 0.1 0.5 0.5885822 0.6579643
## 12 0.3 0.1 0.5 0.6023520 0.6846734
## 13 0.1 1.0 0.5 0.3533340 0.3523991
## 14 0.2 1.0 0.5 0.3252486 0.3370706
## 15 0.3 1.0 0.5 0.3046858 0.3021189
## 16 0.1 10.0 0.5 0.3398367 0.3068958
## 17 0.2 10.0 0.5 0.3161572 0.2782224
## 18 0.3 10.0 0.5 0.3103831 0.2531039
## 19 0.1 0.1 1.0 0.5852364 0.6325069
## 20 0.2 0.1 1.0 0.5836292 0.6396939
## 21 0.3 0.1 1.0 0.6007940 0.6566556
## 22 0.1 1.0 1.0 0.3506588 0.3333726
## 23 0.2 1.0 1.0 0.3496392 0.3271573
## 24 0.3 1.0 1.0 0.3294452 0.3214134
## 25 0.1 10.0 1.0 0.3296097 0.3047940
## 26 0.2 10.0 1.0 0.3240562 0.3157367
## 27 0.3 10.0 1.0 0.3240837 0.2940112
Fungsi tune() akan melakukan eksplorasi grid
search terhadap semua kombinasi parameter.
Untuk setiap kombinasi, dilakukan k-fold cross-validation (default: 10-fold) pada data latih.
Kombinasi dengan error terkecil (MSE) dianggap sebagai konfigurasi terbaik.
Output summary(tuned) mencakup:
tuned$best.model)Visualisasi berikut bertujuan membandingkan hasil prediksi terhadap nilai aktual dari tiga model regresi:
Dengan menggunakan scatterplot dua dimensi, kita
dapat menilai ketepatan prediksi model secara visual
berdasarkan kedekatan titik terhadap garis ideal y = x.
library(reshape2)
library(ggplot2)
# Menggabungkan hasil prediksi dan nilai aktual
df_pred <- data.frame(
Actual = test_data$Target,
OLS = pred_lm,
SVR_Linear = pred_svr_linear,
SVR_RBF = pred_svr_rbf
)
# Melakukan melt agar long format
df_melt <- melt(df_pred, id.vars = "Actual", variable.name = "Model", value.name = "Predicted")
# Plot perbandingan prediksi vs aktual
ggplot(df_melt, aes(x = Actual, y = Predicted, color = Model)) +
geom_point(size = 3, alpha = 0.7) +
geom_abline(slope = 1, intercept = 0, linetype = "dotted", color = "black", linewidth = 1) +
labs(
title = "Perbandingan Akurasi Prediksi: OLS vs SVR Linear vs SVR RBF",
x = "Nilai Aktual (Actual)",
y = "Nilai Prediksi (Predicted)"
) +
scale_color_manual(values = c("OLS" = "red", "SVR_Linear" = "forestgreen", "SVR_RBF" = "steelblue")) +
theme_minimal(base_size = 13)
Grafik ini menyajikan posisi prediksi model terhadap nilai aktual pada data uji:
Target).y = x):
Representasi ideal di mana prediksi tepat sama dengan nilai aktual.Visualisasi ini memperjelas bahwa:
Visualisasi prediksi ini merupakan alat yang sangat penting dalam evaluasi model regresi — tidak hanya dari sisi metrik numerik (RMSE, MAE, R²), tetapi juga dalam memahami bagaimana model berperilaku terhadap distribusi nilai target secara menyeluruh.
Studi kasus ini mengevaluasi performa tiga pendekatan regresi—OLS, SVR Linear, dan SVR RBF—dalam konteks pemodelan prediktif terhadap data dengan potensi pola non-linear. Analisis yang dilakukan secara menyeluruh menghasilkan sejumlah insight substantif dan rekomendasi strategis yang relevan untuk praktik analisis data di berbagai bidang.
Akurasi Prediktif: SVR RBF Unggul
Keterbatasan Model Linier (OLS)
Performa Menengah: SVR Linear
Berikut adalah saran implementatif berdasarkan hasil temuan:
Prioritaskan SVR-RBF untuk Data Non-Linear Gunakan SVR dengan kernel RBF sebagai model utama untuk dataset yang memperlihatkan karakteristik non-linier, karena kemampuannya menangani hubungan kompleks tanpa memerlukan transformasi eksplisit terhadap fitur.
Gunakan OLS sebagai Baseline Interpretatif Model OLS tetap bermanfaat sebagai baseline awal dan untuk keperluan interpretasi koefisien, terutama dalam tahap eksplorasi data atau ketika hubungan linier masih relevan.
Validasi Kuantitatif Multi-Metrik Evaluasi performa model sebaiknya menggabungkan metrik RMSE, MAE, dan R² agar mencakup berbagai aspek kesalahan prediksi dan kemampuan model dalam menjelaskan variasi data.
Terapkan Cross-Validation Untuk menghindari overfitting dan memperoleh estimasi generalisasi yang lebih robust, sangat disarankan menggunakan k-fold cross-validation dalam proses tuning dan evaluasi model.
Feature Engineering Lanjutan Jika performa model masih kurang memadai, pertimbangkan pendekatan lanjutan seperti:
Hasil dari studi ini menekankan bahwa:
Pemilihan model yang efektif bergantung pada karakteristik struktural data. Model yang lebih kompleks seperti SVR-RBF dapat memberikan keuntungan signifikan ketika data menunjukkan pola yang tidak dapat dijelaskan dengan pendekatan linier.
Pendekatan berbasis eksperimen, visualisasi prediksi, dan evaluasi metrik kuantitatif akan lebih andal dalam memastikan akurasi model dan relevansi aplikatif, khususnya untuk data dengan kompleksitas tinggi seperti:
Support Vector Regression (SVR) merupakan metode regresi berbasis margin yang telah terbukti handal, khususnya dalam menangani hubungan non-linier dan kompleks antar variabel. Seiring meningkatnya kompleksitas kebutuhan prediksi di berbagai sektor, SVR pun berkembang ke berbagai bentuk yang lebih canggih dan aplikatif. Berikut ini tiga arah pengembangan SVR yang penting untuk diketahui dan diterapkan dalam praktik data science kontemporer.
Secara default, SVR ditujukan untuk regresi satu variabel target kontinu. Namun, dalam banyak kasus dunia nyata seperti prediksi cuaca, sistem rekomendasi, atau prediksi keuangan multivariabel, kita sering kali perlu memodelkan lebih dari satu target secara simultan. Inilah peran dari pendekatan Multi-Output SVR (MO-SVR).
Karena e1071::svm() tidak mendukung output multivariabel
secara langsung, strategi yang umum digunakan adalah melatih
model SVR secara terpisah untuk tiap variabel target.
library(e1071)
# Simulasi data multi-target
set.seed(260626)
X <- matrix(rnorm(100 * 5), ncol = 5)
Y <- data.frame(
y1 = 2 * X[,1] + rnorm(100),
y2 = X[,2]^2 + rnorm(100)
)
# Model SVR untuk masing-masing target
model_y1 <- svm(X, Y$y1, kernel = "radial")
model_y2 <- svm(X, Y$y2, kernel = "radial")
# Prediksi
pred_y1 <- predict(model_y1, X)
pred_y2 <- predict(model_y2, X)
MultiOutputRegressor di scikit-learn, atau
pendekatan multivariate kernel di SVM) lebih disarankan.Meskipun SVR tidak dirancang khusus untuk data deret waktu, pendekatan transformasi lagged memungkinkan SVR digunakan secara efektif dalam prediksi time series. Strategi ini mengubah data deret waktu menjadi format supervised learning: nilai masa lalu sebagai input, dan nilai saat ini sebagai target.
library(e1071)
# Contoh data time series
data("AirPassengers")
ts_data <- AirPassengers
# Transformasi ke supervised learning (lag = 12)
lagged_data <- embed(ts_data, 13)
X <- lagged_data[, 2:13]
y <- lagged_data[, 1]
# Latih model SVR
svr_ts <- svm(X, y, kernel = "radial")
# Prediksi
forecast <- predict(svr_ts, X)
embed() mengubah data deret waktu menjadi format
lag matrix, cocok untuk input supervised learning.Dalam beberapa kasus seperti prediksi genomik, teks, atau gambar, kita berhadapan dengan data berdimensi sangat tinggi. SVR tetap kompetitif dalam situasi ini karena:
Untuk dimensi sangat tinggi, pertimbangkan:
svmpath, kernlab, atau
integrasi dengan caret untuk pipeline machine learning
modular.Support Vector Regression (SVR) dapat menjadi komponen penting dalam strategi ensemble learning, di mana kekuatan SVR dalam menangkap hubungan non-linier dapat dikombinasikan dengan model lain untuk meningkatkan akurasi dan stabilitas prediksi.
caretEnsemble:library(caret)
library(caretEnsemble)
## Warning: package 'caretEnsemble' was built under R version 4.4.3
# Pastikan X adalah data.frame
X <- as.data.frame(X)
# Setup kontrol untuk cross-validation
ctrl <- trainControl(method = "cv", number = 5, savePredictions = "final")
# Daftar model base
models <- caretList(
x = X, y = y,
trControl = ctrl,
methodList = c("svmRadial", "rf", "glm")
)
# Model ensemble via stacking
ensemble_model <- caretEnsemble(models, metric = "RMSE", trControl = ctrl)
# Ringkasan hasil ensemble
summary(ensemble_model)
## The following models were ensembled: svmRadial, rf, glm
##
## Model Importance:
## svmRadial rf glm
## 0.0453 0.0000 0.9547
##
## Model accuracy:
## model_name metric value sd
## <char> <char> <num> <num>
## 1: ensemble RMSE 15.49691 2.034375
## 2: svmRadial RMSE 25.21851 9.909134
## 3: rf RMSE 20.94384 5.786878
## 4: glm RMSE 15.18143 2.762978
Salah satu tantangan utama dalam penggunaan SVR adalah kurangnya interpretabilitas, terutama karena model ini berbasis kernel dan bukan berbasis koefisien eksplisit seperti regresi linier.
Partial Dependence Plot (PDP)
SHAP (SHapley Additive exPlanations)
LIME (Local Interpretable Model-Agnostic Explanations)
epsilon memungkinkan kontrol terhadap
margin kesalahan toleransi dalam regresi.Gunakan SVR jika:
epsilon.Hindari SVR jika:
C dan
epsilon diatur dengan hati-hati.