Published4 min read
Makine Öğrenmesinin “Söze Güvenen” Algoritması: K-En Yakın Komşu (KNN)
Bugün, komşuluk ilişkilerini temel alarak çalışan ve “bana arkadaşlarını söyle, sana kim olduğunu söyleyeyim” mantığını en iyi şekilde yansıtan K-En Yakın Komşu (K-Nearest Neighbors — KNN) algoritmasından bahsedeceğiz.
KNN Nedir? Temel Felsefesi Ne?
KNN, süpervizyonlu öğrenme (supervised learning) kategorisine giren, hem sınıflandırma hem de regresyon problemleri için kullanılan basit ama etkili bir algoritmadır. Temel felsefesi oldukça basittir: Bir veri noktasının sınıfı veya değeri, en yakın komşularının çoğunluğuna göre belirlenir.
Bir partide tanımadığınız birini düşünün. Çevresindeki insanlar ne kadar neşeliyse, o kişinin de neşeli olma ihtimali yüksektir. Veya bir mahallede, bir evin değeri, en yakınındaki evlerin ortalama değerine göre tahmin edilebilir. İşte KNN de tam olarak bu mantıkla çalışır. Yeni bir veri noktası geldiğinde, elindeki mevcut eğitim verisindeki noktalara olan uzaklıkları hesaplar ve en yakın olan K tane komşusunu belirler.
Nasıl Çalışır? Adım Adım KNN
Bir sınıflandırma problemi üzerinden KNN’nin çalışma adımlarını inceleyelim:
- K Değerini Belirle: İlk olarak, kaç tane en yakın komşuya bakacağımıza karar veririz. Bu değer, algoritmanın en kritik hiperparametrelerinden biridir. Genellikle küçük bir tek sayı seçilir (örneğin, 3, 5, 7).
- Uzaklıkları Hesapla: Yeni, sınıflandırılmamış veri noktasının (yani tahmin etmek istediğimiz noktanın) eğitim setindeki tüm noktalara olan uzaklığını hesaplarız. Bu uzaklık genellikle Öklid Uzaklığı (Euclidean Distance) ile bulunur, ancak Manhattan veya Minkowski gibi farklı metrikler de kullanılabilir.
- En Yakın K Komşuyu Bul: Hesapladığımız uzaklıklara göre en küçük K adet uzaklığa sahip olan noktaları seçeriz. İşte bunlar, yeni noktamızın “en yakın komşuları”dır.
- Sınıflandırma Yap: Bulduğumuz K adet komşunun sınıflarına bakarız. Hangi sınıf en çoksa, yeni noktamızı o sınıfa atarız. Örneğin, K=5 seçtiysek ve komşulardan 3'ü ‘A’ sınıfına, 2'si ‘B’ sınıfına aitse, yeni noktamız ‘A’ sınıfı olarak etiketlenir.
Regresyon probleminde ise mantık benzerdir, ancak son adım farklıdır. Komşuların sınıflarına bakmak yerine, K adet komşunun değerlerinin ortalaması alınarak yeni noktanın değeri tahmin edilir.
Önemli kavramlar ve hiperparametreler
1 k (komşu sayısı)
- Küçük k (ör. 1): Model gürültüye çok hassas — yüksek varyans.
- Büyük k: Model daha düzgün karar sınırları — yüksek bias.
- Pratik: k tek sayı seçmek (iki sınıflı problemler için) bağları azaltır; en iyisini doğrulama (cross-validation) ile bul.
2 Uzaklık ölçüleri
- Euclidean (L2): varsayılan; sqrt(sum((x_i - y_i)^2)).
- Manhattan (L1): sum(|x_i - y_i|); bazı veri türleri için daha dayanıklı.
- Minkowski: Lp normu, p parametresi ile Euclidean/Manhattan arasında geçiş.
- Cosine benzerliği: açıya dayalı; metin gibi yüksek boyutlu yönelim veriler için faydalı.
- Hamming: kategorik/binary veriler için.
3 Weights (Ağırlıklandırma)
- uniform: tüm komşular eşit ağırlık.
- distance: yakın komşulara daha fazla ağırlık verilir; genelde 1/(distance + eps) formülü kullanılır.
4 Özellik ölçeklendirme (feature scaling)
Uzaklık tabanlı yöntemlerde ölçeklendirme çok önemlidir. Özellikler farklı ölçeklerdeyse (örneğin yaş 0–100, geliri 0–1e6) büyük ölçekli özellikler uzaklık hesaplarını domine eder.
- Standartlaştırma (StandardScaler) veya min-max ölçeklendirme kullan.
KNN’nin Avantaj ve Dezavantajları
Her algoritma gibi, KNN’nin de güçlü ve zayıf yönleri vardır:
Avantajları:
- Basit ve Sezgisel: Çalışma mantığı kolayca anlaşılır.
- Eğitim Aşaması Yok: Algoritma, eğitim verisini doğrudan kullanır. Bu yüzden ‘tembel öğrenci’ (lazy learner) olarak da bilinir. Model oluşturma maliyeti düşüktür.
- Çok Yönlü: Hem sınıflandırma hem de regresyon için kullanılabilir.
Dezavantajları:
- Yüksek Hesaplama Maliyeti: Tahmin aşamasında her yeni nokta için tüm eğitim verisine olan uzaklıkları hesaplamak zorundadır. Bu, özellikle büyük veri setlerinde oldukça yavaş olabilir.
- K Değeri Seçimi: En uygun K değerini bulmak zor olabilir. K çok küçükse gürültüye (noise) duyarlı olurken, K çok büyükse model genelleştirme yeteneğini kaybedebilir.
- Özellik Ölçeği: Farklı ölçeklerdeki özellikler, uzaklık hesaplamalarını yanıltabilir. Bu yüzden KNN kullanmadan önce verinin ölçeklendirilmesi (scaling) kritik öneme sahiptir.
- Boyutun Laneti: Veri setindeki özellik (boyut) sayısı arttıkça, noktalar arasındaki uzaklıklar anlamsızlaşmaya başlar.
Pratikte KNN Kullanım Alanları
KNN, özellikle küçük ve orta ölçekli veri setleri için birçok alanda başarılı bir şekilde kullanılabilir:
- Öneri Sistemleri: Bir kullanıcının izlediği filmleri veya dinlediği şarkıları, benzer zevklere sahip komşularının tercihlerine göre önerebilir.
- Tıp Alanı: Belirli semptomları gösteren bir hastanın, benzer semptomlara sahip daha önceki hastaların teşhislerine göre sınıflandırılması.
- Görüntü İşleme: Basit görüntü sınıflandırma görevlerinde (örneğin, el yazısı tanıma) kullanılabilir.
Performans ölçütleri
- Sınıflandırma: Accuracy, Precision, Recall, F1-score, ROC AUC (ikili sınıflandırma için).
- Regresyon: MSE, RMSE, MAE, R².
Model seçimi ve hiperparametre ayarı için cross-validation (k-fold) kullanılmalıdır.
Hızlandırma ve büyük veri
- KD-Tree / Ball-Tree: scikit-learn, algorithm='kd_tree' veya algorithm='ball_tree' ile destekler. Ancak bu yapılar yüksek boyutlarda verimsizleşir.
- Approximate Nearest Neighbors (ANN): Büyük veri ve yüksek boyut için FAISS (Facebook), Annoy, HNSW gibi kütüphaneler kullanılır.
- Önbellekleme / Kümeleme: Veriyi küçük altkümelere bölüp her altkümde KNN çalıştırmak veya küme merkezleri üzerinde işlem yapmak bazı senaryolarda işe yarar.
Sonuç
K-En Yakın Komşu (KNN), karmaşık matematiksel denklemlerden uzak, sezgisel ve anlaşılır bir makine öğrenmesi algoritmasıdır. Her ne kadar büyük veri setleri için ideal olmasa da, basitliği ve çok yönlülüğü sayesinde makine öğrenmesine giriş yapmak isteyenler için harika bir başlangıç noktası sunar.
Siz de bir sonraki projenizde veri setinizin özelliklerine göre KNN’i denemeyi düşünebilirsiniz. Unutmayın, doğru algoritma seçimi, her zaman problemi iyi anlamakla başlar!
Bu makaleyi beğendiyseniz, takipte kalın ve makine öğrenmesiyle ilgili daha fazla içeriğe ulaşın. 👋