Makine öğrenmesi projelerinde sınıflandırma problemiyle karşılaştığınızda akla gelen ilk algoritmalardan ikisi K-En Yakın Komşu (KNN) ve Destek Vektör Makineleri (SVM)'dir. Her iki yöntem de denetimli öğrenme kategorisinde yer alır ancak çalışma prensipleri, güçlü ve zayıf yönleri oldukça farklıdır. Bu yazıda KNN ve SVM'yi veri ölçeği, doğrusal ayrılabilirlik, hesaplama maliyeti ve yorumlanabilirlik gibi kriterler üzerinden karşılaştırarak hangi durumda hangi algoritmayı seçmeniz gerektiğini adım adım açıklıyoruz.
KNN ve SVM'nin Temel Çalışma Prensipleri
KNN, sınıflandırma yaparken yeni bir veri noktasının etrafındaki en yakın k komşusunun çoğunluk sınıfına göre karar verir. Parametre olarak yalnızca komşu sayısı (k) ve uzaklık metriği (genellikle Öklid) kullanır. Öte yandan SVM, sınıfları ayıran en iyi hiper düzlemi bulur ve destek vektörleri adı verilen sınıra en yakın veri noktalarına odaklanır. SVM, çekirdek (kernel) fonksiyonları sayesinde doğrusal olmayan sınırları da öğrenebilir.
Karşılaştırma Tablosu
| Özellik | KNN | SVM |
|---|---|---|
| Çalışma Prensibi | Komşuluk tabanlı (örnek tabanlı) | Hiper düzlem tabanlı (model tabanlı) |
| Eğitim Süresi | Yok denecek kadar kısa (tembel öğrenme) | Uzun (özellikle büyük veride) |
| Tahmin Süresi | Yavaş (her tahmin için tüm veriyle karşılaştırma) | Hızlı (yalnızca destek vektörleriyle) |
| Veri Ölçeği | Küçük-orta veri için uygun; büyük veride yavaşlar | Büyük veri ve yüksek boyutlu veri için ölçeklenebilir |
| Doğrusal Ayrılabilirlik | Doğrusal sınırlarda da çalışır, ancak genellikle doğrusal olmayan sınırlarda daha iyidir | Çekirdek hilesiyle doğrusal olmayan sınırları mükemmel yakalar |
| Aykırı Değerlere Duyarlılık | Duyarlı değil (ortalamayı kullandığı için etkisi sınırlı) | Duyarlı (destek vektörleri aykırı değerlerden kolayca etkilenir) |
| Hiperparametre Sayısı | Az (k ve uzaklık metriği) | Çok (C, gamma, çekirdek türü vb.) |
| Yorumlanabilirlik | Yüksek (hangi komşuların seçildiği görülebilir) | Düşük (destek vektörleri dışında model karar sınırı anlaşılmaz) |
| Veri Ön İşleme | Ölçeklendirme zorunlu | Ölçeklendirme zorunlu |
KNN Ne Zaman Tercih Edilir?
KNN, özellikle küçük ve orta ölçekli veri setlerinde, düşük boyutlu uzayda, sınıflar arası sınırların karmaşık olmadığı durumlarda iyi sonuç verir. Tembel öğrenme sayesinde eğitim aşaması yoktur, bu nedenle sık sık model güncellemeniz gerekiyorsa pratik bir seçenektir. Ayrıca modelin kararlarının nedenini anlamak istiyorsanız (örneğin, belirli bir tahmin için hangi komşuların rol oynadığını görmek) KNN daha şeffaftır. Dengesiz veri kümelerinde sınıf frekansına duyarlı olduğu için dikkatli olunmalı; SMOTE gibi örnekleme yöntemleriyle desteklenebilir.
SVM Ne Zaman Tercih Edilir?
SVM, yüksek boyutlu veri (örneğin metin sınıflandırması) ve sınıfların karmaşık, doğrusal olmayan ayrıldığı durumlarda üstündür. Radyal tabanlı fonksiyon (RBF) çekirdeğiyle pek çok gerçek dünya probleminde yüksek doğruluk sağlar. Sınıf dengesizliği ile başa çıkmak için sınıf ağırlığı (class_weight) parametresi ayarlanabilir. Ayrıca modelin yalnızca destek vektörlerine dayanması, bellek kullanımını ve tahmin süresini optimize eder. Splash verisi Bayesian Optimization gibi yöntemlerle SVM'nin hiperparametreleri (C, gamma) optimize edilebilir.
Hangi Durumda Hangi Algoritma?
- Veri küçük (binlerce örnek) ve boyut düşük (10'dan az özellik): KNN hızlı ve yorumlanabilir çözüm sunar.
- Veri büyük (milyonlarca örnek) veya boyut yüksek (100'den fazla özellik): SVM, çekirdek hilesiyle daha iyi ölçeklenir ve daha kısa tahmin süresi verir.
- Sınıflar birbirinden net ayrılamıyor, doğrusal olmayan desenler var: SVM (özellikle RBF çekirdeği) veya KNN (uygun k değeriyle) kullanılabilir; ancak SVM genellikle daha başarılıdır.
- Aykırı değerler mevcutsa: KNN, SVM'ye kıyasla daha toleranslıdır. SVM'de C parametresi düşük tutulup aykırı değerlerin etkisi azaltılabilir.
- Model yorumlanabilirliği kritikse: KNN, hangi örneklerin karar verdiğini gösterebilir; SVM'de ise SHAP veya LIME gibi model agnostik açıklama yöntemleri kullanmak gerekir - SHAP ve LIME karşılaştırmamıza göz atabilirsiniz.
Adım Adım Uygulama: KNN ve SVM ile Sınıflandırma
Aşağıda popüler bir veri seti (iris) üzerinde iki algoritmayı karşılaştıran basit bir Python kodu örneği bulacaksınız. (Not: Bu kod yalnızca fikir verme amaçlıdır; doğrudan kopyalamayın.)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
# Veri yükleme ve bölme
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Ölçeklendirme (her iki algoritma için zorunlu)
scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s = scaler.transform(X_test)
# KNN
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train_s, y_train)
y_pred_knn = knn.predict(X_test_s)
print(f"KNN Doğruluk: {accuracy_score(y_test, y_pred_knn):.2f}")
# SVM (RBF çekirdek)
svm = SVC(kernel='rbf', C=1.0, gamma='scale')
svm.fit(X_train_s, y_train)
y_pred_svm = svm.predict(X_test_s)
print(f"SVM Doğruluk: {accuracy_score(y_test, y_pred_svm):.2f}")
KNN burada yüksek doğruluk verirken, veri küçük ve boyut düşük olduğu için SVM de benzer sonuç üretir. Ancak veri büyüdükçe farklar belirginleşir.
Hiperparametre Optimizasyonu
Her iki algoritmanın da başarısı hiperparametrelere bağlıdır. KNN'de k değeri modelin esnekliğini belirler; düşük k gürültüye duyarlılığı artırır. Elbow metodu veya çapraz doğrulama ile optimum k bulunabilir. SVM'de C (düzenlileştirme) ve gamma (RBF çekirdeğin yayılımı) performansta kritik rol oynar. Bayesian Optimization gibi akıllı arama yöntemleriyle bu parametreleri verimli bir şekilde ayarlayabilirsiniz.
Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
- Ölçeklendirmeyi unutmak: Hem KNN hem SVM mesafe tabanlıdır; büyük ölçekli özellikler diğerlerini domine eder.
- KNN'de k değerini çift seçmek (ikili sınıflamada): Beraberlik sorununa yol açar; genellikle tek sayı tercih edilir.
- SVM'de hatalı çekirdek seçimi: Doğrusal veri için RBF kullanmak aşırı uyuma neden olabilir; önce doğrusal çekirdek denenmelidir.
- Destek vektörlerine bakmamak: SVM modelinde destek vektör sayısı fazla ise model karmaşıklaşır, ezber yapma riski artar.
- Boyutluluk lanetini göz ardı etmek: Yüksek boyutlu veride KNN'in performansı düşer; SVM burada daha iyi sonuç verir.
Sonuç: Kesin Bir Kazanan Yok, Doğru Araç Projeye Göre Değişir
KNN ve SVM, makine öğrenmesi cephaneliğinin vazgeçilmez iki silahıdır. KNN, hızlı prototipleme ve yorumlanabilirlik gerektiren küçük-orta ölçekli problemlerde idealken; SVM, yüksek boyut ve karmaşık sınırlarla başa çıkmak için güçlü bir seçenektir. Verinizin büyüklüğü, boyutu, sınıf dağılımı ve gereken tahmin süresi gibi faktörleri değerlendirerek karar vermelisiniz. Unutmayın, hiçbir algoritma her durumda en iyisi değildir. Deneyler yaparken SHAP ve LIME gibi açıklama araçlarıyla modelinizin kararlarını anlamaya çalışın. Bu karşılaştırma, sınıflandırma probleminiz için doğru algoritmayı seçmenize yardımcı olacaktır.
Sık Sorulan Sorular
KNN ve SVM arasındaki en temel fark nedir?
KNN, örnek tabanlı (lazy) bir algoritmadır ve yeni veriyi en yakın komşuların çoğunluğuna göre sınıflandırır. SVM ise sınıflar arasındaki en iyi hiper düzlemi bularak model oluşturur ve yalnızca destek vektörlerine dayanır.
Hangi durumda SVM KNN'den daha iyi performans gösterir?
SVM, yüksek boyutlu verilerde (örneğin metin sınıflandırması) ve sınıfların doğrusal olmayan karmaşık sınırlarla ayrıldığı durumlarda genellikle daha başarılıdır. Ayrıca büyük veri setlerinde tahmin süresi daha kısadır.
KNN'nin avantajları nelerdir?
KNN, eğitim aşaması olmadığı için çok hızlıdır ve model kararları kolayca açıklanabilir. Aykırı değerlere karşı dayanıklıdır ve hiperparametre sayısı azdır. Küçük-orta ölçekli veriler için idealdir.
KNN ile çalışırken nelere dikkat etmeliyim?
Veri ölçeklendirme zorunludur. k değeri düşük seçilirse gürültüye duyarlılık artar, yüksek seçilirse sınırlar aşırı yumuşar. Dengesiz veri setlerinde sınıf frekansına dikkat edilmeli.
SVM'de çekirdek fonksiyonu nasıl seçilir?
Önce doğrusal çekirdek denenir. Veri doğrusal değilse RBF (Radyal Tabanlı Fonksiyon) genellikle iyi sonuç verir. Polinom çekirdek de kullanılabilir ancak aşırı uyum riski daha yüksektir.






