🧩 Algoritma Orta ⏱ Tahmini: 50 dk

K-En Yakın Komşu (KNN) Sınıflandırma Algoritması: Temel Yapay Zeka

Makine öğrenmesine giriş: K-Nearest Neighbors (KNN) algoritması nedir? Öklid mesafesi, çoğunluk oylaması ve kütüphanesiz sıfırdan Python KNN kodu.

📅 16 Ekim 2026 • 👁 0 kez görüntülendi • ✅ Ücretsiz Ders

Yapay zeka ve makine öğrenmesi (Machine Learning) dünyasına adım atarken karmaşık matematiksel formüller, yapay sinir ağları ve derin öğrenme modelleri genellikle göz korkutucu görünür. Oysa makine öğrenmesinin temelinde, insanın günlük hayattaki çok basit bir sezgisi yatar: **"Bana arkadaşını söyle, sana kim olduğunu söyleyeyim!"** İşte bu atasözünün veri bilimindeki matematiksel karşılığı **K-Nearest Neighbors (KNN / K-En Yakın Komşu)** algoritmasıdır. Bu rehberde, hiçbir harici kütüphane (scikit-learn vb.) kullanmadan, sıfırdan Python ile çalışan bir yapay zeka sınıflandırma modeli inşa edeceğiz.

---

1. KNN Nedir? Denetimli ve Tembel Öğrenme

KNN, etiketli verilerle çalışan bir **Denetimli Öğrenme (Supervised Learning)** algoritmasıdır:

  • **Tembel Öğrenme (Lazy Learner):** KNN, eğitim aşamasında karmaşık bir matematiksel model veya ağırlık grafiği eğitmez. Tüm eğitim verilerini belleğinde tutar ve gerçek hesaplamayı yalnızca yeni ve bilinmeyen bir veri geldiği anda (tahmin anında) yapar.
  • Temel Prensip:

    Yeni bir veri noktası geldiğinde:

    1. Bu noktanın veritabanındaki diğer TÜM noktalara olan mesafesi hesaplanır.

    2. Mesafeler küçükten büyüğe sıralanır.

    3. En yakın $K$ adet komşu seçilir.

    4. Bu $K$ komşu arasında en çok hangi sınıf varsa (Çoğunluk Oylaması / Majority Voting), yeni nokta o sınıfa ait kabul edilir!

    ---

    2. Mesafelerin Hesaplanması: Öklid Mesafesi Formülü

    İki veri noktası ($P_1 = (x_1, y_1)$ ve $P_2 = (x_2, y_2)$) arasındaki geometrik uzaklık, 2 boyutlu uzayda Pisagor teoremine dayanan **Öklid Mesafesi (Euclidean Distance)** formülüyle bulunur:

    $$d(P_1, P_2) = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}$$

    Eğer veri 3 boyutlu veya $N$ boyutlu ise (örneğin ağırlık, renk tonu, tatlılık oranı):

    $$d(A, B) = \sqrt{\sum_{i=1}^{n} (A_i - B_i)^2}$$

    ---

    3. $K$ Değerinin Seçimi ve Aşırı Öğrenme (Overfitting)

  • **$K=1$ Seçilirse:** Model aşırı duyarlı olur ve ortamdaki gürültülü (hatalı) verilerden çok çabuk etkilenir (Overfitting).
  • **$K$ Çok Büyük Seçilirse:** Tüm sınıfların genel ortalamasını alarak yerel detayları kaçırır (Underfitting).
  • **Altın Kural:** İki sınıflı problemlerde oylamanın eşitlikle (berabere) sonuçlanmaması için $K$ değeri daima **TEK SAYI** ($K=3, 5, 7$) seçilmelidir.
  • ---

    4. Sıfırdan Python ile Saf KNN Algoritması

    Aşağıdaki örnekte meyveleri (Elma ve Mandalina) ağırlıklarına ve çaplarına göre sınıflandıran bir model kuralım:

    import math
    from collections import Counter
    
    # Eğitim Verileri: [Ağırlık (gr), Çap (cm)], Etiket: 'Elma' veya 'Mandalina'
    dataset = [
        ([180, 8.0], 'Elma'),
        ([190, 8.5], 'Elma'),
        ([170, 7.8], 'Elma'),
        ([80, 5.0],  'Mandalina'),
        ([95, 5.5],  'Mandalina'),
        ([85, 5.2],  'Mandalina')
    ]
    
    def oklid_mesafesi(nokta1, nokta2):
        toplam = sum((a - b) ** 2 for a, b in zip(nokta1, nokta2))
        return math.sqrt(toplam)
    
    def knn_tahmin(egitim_verisi, yeni_nokta, k=3):
        mesafeler = []
        for ozellikler, etiket in egitim_verisi:
            mesafe = oklid_mesafesi(yeni_nokta, ozellikler)
            mesafeler.append((mesafe, etiket))
    
        # Mesafeye göre küçükten büyüğe sırala
        mesafeler.sort(key=lambda x: x[0])
    
        # En yakın K komşuyu al
        k_komsular = [etiket for _, etiket in mesafeler[:k]]
    
        # Çoğunluk oylaması yap (En çok tekrar eden etiketi seç)
        en_yaygin = Counter(k_komsular).most_common(1)[0][0]
        return en_yaygin
    
    # Bilinmeyen Yeni Meyve: Ağırlık: 88 gr, Çap: 5.1 cm
    yeni_meyve = [88, 5.1]
    tahmin = knn_tahmin(dataset, yeni_meyve, k=3)
    print(f"Ölçülen Meyve ({yeni_meyve}) Tahmini: {tahmin.upper()}")

    ---

    5. Kendini Geliştirme Görevi: Min-Max Normalizasyonu

    Fark ettiğiniz gibi ağırlık (180 gr) çaptan (8 cm) sayısal olarak çok daha büyüktür. Bu durum ağırlık ekseninin mesafeyi haksız yere domine etmesine yol açar. Verileri 0 ile 1 arasına ölçekleyen **Min-Max Normalizasyonu** fonksiyonunu kodunuza ekleyin:

    $$X_{ ext{norm}} = rac{X - X_{\min}}{X_{\max} - X_{\min}}$$

    ---

    ---

    6. Mesafe Metrikleri Karşılaştırması: Manhattan vs Öklid

    KNN algoritmasında iki nokta arasındaki uzaklığı ölçerken problemin doğasına göre farklı metrikler tercih edilir:

    | Mesafe Türü | Matematiksel Formül | En Uygun Olduğu Senaryo |

    |---|---|---|

    | **Öklid (Euclidean)** | $\sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}$ | Kuş uçuşu doğrudan mesafeler, fiziksel sensör verileri |

    | **Manhattan (L1)** | $|x_2 - x_1| + |y_2 - y_1|$ | Izgara sokak haritaları, şehir içi taksi mesafeleri |

    | **Minkowski** | $(\sum |x_i - y_i|^p)^{1/p}$ | $p=1$ ve $p=2$ durumlarını kapsayan genel metrik |

    ---

    7. Çapraz Doğrulama (K-Fold Cross-Validation) ile En İdeal K Değerini Bulma

    Bir makine öğrenmesi mühendisi $K$ değerini rastgele tahmin etmez. Eğitim verisi 5 veya 10 eşit parçaya bölünür (K-Fold). Farklı $K$ değerleri ($K=1, 3, 5, 7, 9, 11$) denenerek doğruluk oranları (Accuracy Score) test edilir. Hata payını en aza indiren en yüksek skorlu $K$ değeri nihai model parametresi olarak seçilir.

    ---

    ---

    8. Boyut Laneti (Curse of Dimensionality) ve Çözüm Yolları

    KNN algoritmasının en büyük handikaplarından biri veri setindeki özellik (sütun) sayısı arttıkça ortaya çıkan **Boyut Laneti (Curse of Dimensionality)** fenomenidir. Boyut sayısı (örneğin 100 farklı sensör parametresi) arttığında matematiksel uzay o kadar seyrekleşir ki, tüm noktalar birbirine neredeyse eşit mesafede gibi görünmeye başlar ve Öklid mesafesi ayırt edici geometrik özelliğini yitirir. Bu gibi yüksek boyutlu durumlarda KNN uygulanmadan önce Temel Bileşen Analizi (PCA) gibi boyut indirgeme teknikleri kullanılarak en önemli 2-3 özelliğe odaklanmak modelin tahmin doğruluğunu dramatik biçimde artırır.

    ---

    Sonuç

    KNN algoritması, yapay zekanın aslında karmaşık bir büyü değil, saf bir geometri ve istatistik optimizasyonu olduğunu gösteren en harika örnektir. Makine öğrenmesi serüveninizde sağlam bir adım atmak için sitemizdeki [Robotik Derslerini](/dersler) takip edebilirsiniz!

    Sorun mu yaşadınız veya aklınıza takılan bir nokta mı var?

    Discord topluluğumuza katılarak diğer geliştiriciler ve eğitmenlerle yardımlaşabilirsiniz.

    Discord'da Soru Sor →