Apa itu Support Vector Machine?
Support Vector Machine (SVM) adalah algoritma supervised learning yang mencari hyperplane optimal untuk memisahkan data ke dalam kelas berbeda. SVM sangat efektif untuk data berdimensi tinggi.
Konsep Dasar SVM
- Hyperplane: Garis/bidang pemisah antar kelas.
- Support Vectors: Data points terdekat dengan hyperplane.
- Margin: Jarak antara hyperplane dengan support vectors (dimaksimalkan).
Kernel Trick
Untuk data yang tidak linear separable, SVM menggunakan kernel untuk mentransformasi data ke dimensi lebih tinggi:
- Linear: Untuk data yang linear separable.
- RBF (Radial Basis Function): Paling umum digunakan, untuk data non-linear.
- Polynomial: Untuk pola polynomial.
- Sigmoid: Mirip neural network.
Implementasi Python
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, confusion_matrix
import pandas as pd
# Load data
data = pd.read_csv('data.csv')
X = data.drop('target', axis=1)
y = data['target']
# Preprocessing - SVM sensitif terhadap skala!
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Split data
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# Train SVM dengan RBF kernel
model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train, y_train)
# Predict dan evaluate
y_pred = model.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")
print(confusion_matrix(y_test, y_pred))
Hyperparameter Tuning
# Grid Search untuk optimasi hyperparameter
param_grid = {
'C': [0.1, 1, 10, 100],
'gamma': ['scale', 'auto', 0.1, 0.01],
'kernel': ['rbf', 'linear']
}
grid_search = GridSearchCV(SVC(), param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)
print(f"Best params: {grid_search.best_params_}")
print(f"Best score: {grid_search.best_score_:.4f}")
Kapan Menggunakan SVM?
- Data berdimensi tinggi (banyak fitur).
- Dataset ukuran kecil-menengah (SVM lambat untuk big data).
- Classification dengan margin yang jelas.