K-En Yakın Komşu (KNN) algoritması, hem sınıflandırma hem de regresyon problemleri için kullanılabilen, denetimli öğrenmeye dayalı bir tembel öğrenme yöntemidir. KNN algoritması, parametre tahmini veya karmaşık model eğitimi gerektirmemesi bakımından literatürde parametrik olmayan bir yaklaşım olarak tanımlanır. Bu yöntem, tüm eğitim örneklerinin bellekte tutulmasına dayanır ve tahmin süreci, sorgu örneği ile eğitim örnekleri arasındaki mesafelerin hesaplanması yoluyla gerçekleştirilir. Bu bağlamda KNN, örnek tabanlı öğrenme yöntemleri arasında yer alır.
Avantajları
KNN algoritması, basit olmasına rağmen çeşitli güçlü yönlere sahiptir:
- Çift Amaçlı Kullanım: Hem sınıflandırma hem de regresyon görevlerinde doğrudan uygulanabilir.
- Yüksek Yorumlanabilirlik: Model oluşturma aşaması olmadığından, tahminler tamamen veri örneklerine ve mesafe ölçümüne dayanır; bu, şeffaf bir karar mekanizması sağlar.
- Esnek Uyarlanabilirlik: Küçük boyutlu ve iyi ayrışmış veri kümelerinde, parametrik olmayan yapısı sayesinde karmaşık modellerle rekabet edebilecek düzeyde doğruluk sunabilir.
- Hızlı Uygulama: Teorik karmaşıklığı düşük olduğundan, hızlı prototipleme ve öğretici örnekler için uygundur.
Çalışma Prensipleri
KNN algoritmasının temel işleyişi aşağıdaki aşamalara ayrılabilir:
1.Adım - Komşu Sayısının Seçilmesi (k)
K değeri, algoritmanın genelleme performansını doğrudan etkileyen kritik bir hiperparametredir. Genellikle ikili sınıflandırma problemlerinde eşit oy durumlarını önlemek amacıyla tek sayılar (ör. 3, 5, 7) tercih edilir.
2.Adım - Mesafe Ölçümü
Örnekler arası benzerlik veya uzaklık, seçilen uygun bir mesafe metriği ile hesaplanır. Uygulama bağlamına göre çeşitli metrikler kullanılabilir:
- Öklidyen Mesafe: Sürekli ve ölçeklendirilmiş özelliklerde yaygın tercih edilir; iki nokta arasındaki en kısa doğrusal mesafeyi ifade eder.
- Manhattan Mesafesi: Özellikle seyrek ve yüksek boyutlu veri kümelerinde etkilidir; koordinatlar arası mutlak farkların toplamını alır.
- Hamming Mesafesi: Kategorik veya ikili diziler için kullanılır; iki dizi arasındaki farklılık pozisyonlarının sayısını ölçer.
- Kosinüs Benzerliği: Metin madenciliği ve vektör uzayı modellemesinde yaygın olup, vektörler arasındaki açıya dayalı benzerlik analizi yapar.
3.Adım - Komşuların Belirlenmesi
Sorgu noktasına (test örneğine) olan tüm mesafeler hesaplanır, artan düzende sıralanır ve en yakın k komşu seçilir.
4.Adım - Tahmin Üretimi
- Sınıflandırmada: Çoğunluk oyu yöntemi kullanılır; bazı durumlarda mesafeye göre ağırlıklandırılmış oy kullanılabilir.
- Regresyonda: K komşunun hedef değerlerinin basit ortalaması veya mesafe ağırlıklı ortalaması alınarak çıktı tahmini yapılır.
Mesafe Ölçümü Seçimi ve Parametre Hassasiyeti
KNN algoritmasının başarımı, k parametresi ve mesafe ölçüm yönteminin doğru seçimine bağlıdır. Genel eğilimler şu şekilde özetlenebilir:
- Küçük k değerleri (ör. 1–3) düşük önyargı fakat yüksek varyans ile sonuçlanır. Bu durum, modelin aşırı uyum (overfitting) eğilimini artırabilir.
- Büyük k değerleri (>15), daha düzgün karar sınırları oluşturur, varyansı azaltır ancak sınıf ayrımını bulanıklaştırabilir.
- En uygun k değeri ve mesafe metriği, genellikle çapraz doğrulama (cross-validation) teknikleri kullanılarak ampirik biçimde belirlenir.
Ayrıca, özelliklerin ölçeklendirilmesi (ör. z-puanı standardizasyonu veya min-max dönüşümü) mesafe hesaplarının adil olması açısından kritik öneme sahiptir. Aksi durumda, geniş değer aralığına sahip özellikler mesafe ölçümünü tek başına domine edebilir ve modelin önyargılı sonuçlar üretmesine sebep olabilir.
Uygulamalı Örnek: Iris Veri Kümesinde KNN Sınıflandırması
Aşağıdaki Python örneği, KNN algoritmasının pratikte nasıl kullanılabileceğini göstermektedir. Örnek çalışmada, Iris veri kümesi üzerinde farklı k değerleri test edilerek en uygun parametre, çapraz doğrulama yöntemiyle belirlenmektedir:
from sklearn.datasets import load_iris from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline # Veri kümesinin yüklenmesi X, y = load_iris(return_X_y=True) # Eğitim ve test veri kümelerinin oluşturulması X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Ölçeklendirme ve KNN pipeline pipeline = make_pipeline( StandardScaler(), KNeighborsClassifier() ) # K değerleri için parametre ızgarası (tek sayılar) param_grid = { "kneighborsclassifier__n_neighbors": range(1, 16, 2) } # Çapraz doğrulama ile model seçimi model = GridSearchCV(pipeline, param_grid, cv=5) model.fit(X_train, y_train) # En iyi parametre ve test doğruluğu print("En uygun k değeri:", model.best_params_["kneighborsclassifier__n_neighbors"]) print("Test doğruluk skoru:", model.score(X_test, y_test))
Örnek Çıktı:
En uygun k değeri: 1 Test doğruluk skoru: 0.97