AI Atlas
Orta· ~2 dk okuma#svm#support-vector-machine#kernel

Destek Vektör Makineleri

Support Vector Machine · SVM

İki sınıfı, aralarındaki marjı (boşluğu) maksimize edecek bir hiper-düzlemle ayıran ve çekirdek (kernel) numarasıyla doğrusal olmayan ilişkileri öğrenebilen güçlü algoritma.

DESTEK VEKTÖR MAKİNESİdestek vektörleriİki sınıfı en geniş marjla ayıran sınır.
Tanım

Bir SVM, iki sınıfı ayıran sınırı bulurken sınırın iki yanında "tampon bölge" bırakmaya çalışır. Bu tampona margin denir; sınıra en yakın örneklere de destek vektörleri (support vectors). Algoritma marjı genişletmeye çalışır çünkü geniş marj yeni örneklere karşı daha kararlıdır.

Veri doğrusal olarak ayrılamadığında SVM'nin asıl gücü ortaya çıkar: kernel trick. Veriyi yüksek boyutlu bir uzaya açıkça taşımadan, o uzaydaki nokta-içi-çarpımları doğrudan hesaplayan fonksiyonlar (RBF, polynomial, sigmoid) kullanılır. Sonuç: orijinal uzayda eğri, yüksek boyutlu uzayda doğrusal bir sınır.

SVM küçük-orta veri setlerinde, özellikle özellik sayısının örnek sayısından çok büyük olduğu durumlarda (örn. genetik veriler, metin sınıflandırma) çok etkilidir. Çok büyük verilerde eğitim süresi olası olmayan boyutlara çıkar; o boyutta gradient boosting ya da derin öğrenme tercih edilir.

Benzetme

İki rakip futbol takımının taraftarlarını ayıran bir bariyer çekmen gerektiğini düşün. Bariyeri tam ortaya çekmek istemezsin; her iki tarafa da nefes alacak boşluk bırakmak istersin. Eğer iki taraftan da bir grup birbirine çok yakınsa, bariyer onlardan "destek alır" — onlar en kritik gözlemlerdir. SVM bariyeri tam olarak bu mantıkla çeker; az sayıda kritik veri noktası modelin şeklini belirler.

Gerçek dünyadan örnek

Bir biyoinformatik laboratuvarı 200 hastanın 20.000 genini inceleyerek "kanser var mı yok mu" sınıflandırması yapmak istiyor. Özellik (gen) sayısı örneklerden yüz kat fazla — bu klasik "p >> n" durumu. Random forest bu kadar az veriye fazla bağımlı olur, gradient boosting de zorlanır.

Doğrusal kernel'lı SVM eğitildiğinde, modelin destek vektörleri 20 hastaya iniyor — onlar sınırı belirliyor, geri kalan 180 hasta arka planda. Test setinde %91 doğruluk, yorumlanabilir: hangi genlerin ağırlığı en yüksek diye ranking çıkarılıyor. Az veriyle, yüksek boyutta, SVM hâlâ ilk seçenek.

Kod örnekleri
scikit-learn · SVM ve kernel seçimiPython
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV

pipe = Pipeline([
    ("scaler", StandardScaler()),
    ("svm", SVC(probability=True)),
])

# C: marj genişliği vs hata toleransı; gamma: RBF eğriliği
param_grid = {
    "svm__kernel": ["linear", "rbf"],
    "svm__C": [0.1, 1, 10, 100],
    "svm__gamma": ["scale", 0.01, 0.1],
}

gs = GridSearchCV(pipe, param_grid, cv=5, scoring="f1_macro", n_jobs=-1)
gs.fit(X_train, y_train)

print(f"En iyi: {gs.best_params_}, F1={gs.best_score_:.3f}")
Ne zaman kullan
  • Küçük-orta boyutlu veri seti (~10K satıra kadar)
  • Özellik sayısı örnek sayısına yakın ya da daha fazla olan durumlar
  • Doğrusal olmayan ama net bir sınıf sınırı varsa (kernel ile)
  • Metin sınıflandırma, genomik ve görüntü gibi yüksek boyutlu verilerde
Ne zaman kullanma
  • Çok büyük veri (>100K) — eğitim süresi karesel ya da daha kötü ölçeklenir
  • Olasılık çıktısı kritikse — SVM olasılıkları doğrudan kalibre etmez (Platt scaling şart)
  • Açıklanabilirlik şartsa ve doğrusal olmayan kernel kullanılıyorsa — destek vektörleri yorumlanması zor
Sık yapılan hatalar

Ölçeklendirmeyi atlamak

SVM uzaklık tabanlıdır; bir özellik 0–1, diğeri 0–1.000.000 ise tek özellik kararı belirler. StandardScaler hep önce gelir.

C ve gamma'yı dikkatsiz seçmek

C çok yüksekse aşırı öğrenme, çok düşükse yetersiz öğrenme. Gamma RBF kernel'in eğrilik derecesini belirler. GridSearchCV ile birlikte ayarla.

Büyük veri uyarısını görmezden gelmek

100K örnekte SVM eğitimi saatler sürebilir. Doğrusal kernel için liblinear veya SGDClassifier daha uygun; non-lineer için Nyström approximation gibi yaklaşık yöntemleri düşün.