SVM Classifier

"Mencari Jalan Terlebar di Antara Dua Kubu"

1. Apa itu SVM?

Bayangkan ada dua pasukan (Merah dan Biru) di sebuah lapangan. Tugas SVM adalah memasang Pagar (Hyperplane) yang memisahkan kedua pasukan tersebut.

Tapi SVM tidak sembarangan bikin pagar. Dia mencari pagar yang memiliki Margin (Jarak Aman) Terlebar. Dia ingin pagar itu sejauh mungkin dari tentara Merah terdepan dan tentara Biru terdepan.

Tentara terdepan inilah yang disebut Support Vectors (karena mereka yang "menyangga" batas wilayah).

2. Visualisasi: Optimal Hyperplane

Garis Tengah = Hyperplane
Garis Putus-putus = Margin
Titik dengan Cincin Emas = Support Vectors

3. Kernel Trick: Data Tidak Bisa Teisah?

Bagaimana jika titik merah ada di tengah dan dikepung titik biru? (Seperti telur mata sapi).

Kita tidak bisa menarik garis lurus!

Kernel Trick adalah trik matematika untuk "melempar" data ke dimensi yang lebih tinggi (3D). Di 3D, kita bisa menyelipkan kertas (Hyperplane) untuk memisahkan kuning telur (Merah) dari putih telur (Biru).

  • Linear Kernel: Untuk data sederhana (garis lurus).
  • RBF Kernel (Radial Basis Function): Paling populer, untuk batas yang melengkung-lengkung.
  • Polynomial: Untuk batas yang melengkung drastis.

4. Implementasi Python (Scikit-Learn)

from sklearn.svm import SVC
import numpy as np

# 1. Data [Berat, Ukuran] -> [Buah: 0=Apel, 1=Jeruk]
# Apel biasanya berat & besar, Jeruk ringan & kecil
X = [[150, 7], [160, 8], [140, 7], [170, 8], # Apel
     [120, 5], [110, 5], [130, 6], [115, 5]] # Jeruk
y = [0, 0, 0, 0, 1, 1, 1, 1]

# 2. Model SVC (Support Vector Classification)
# kernel='linear' (Garis Lurus) atau 'rbf' (Lengkung)
model = SVC(kernel='linear', C=1.0)

# 3. Training
model.fit(X, y)

# 4. Prediksi (125 gram, 5.5 cm)
prediksi = model.predict([[125, 5.5]])
print("Prediksi:", "Jeruk" if prediksi[0] == 1 else "Apel")

# 5. Cek Support Vectors (Siapa yang jadi patokan?)
print("Indeks Support Vectors:", model.support_)
# Menampilkan indeks data yang paling dekat dengan garis batas