Published on

KNN Algoritması Nedir?

Authors
  • avatar
    Name
    Alperen Önal
    Twitter
Makine Öğrenmesi

KNN(K-Nearest Neighbors), Türkçe adıyla K-En Yakın Komşu,hem sınıflandırma hem de regresyon problemleri için kullanılan basit ve etkili bir supervised makine öğrenmesi algoritmasıdır.

Temel Mantığı

  • Yeni bir veri noktasını, eğitim veri setindeki en yakın k komşularına bakarak sınıflandırmak veya tahmin etmektir.
  • "Benzer şeyler birbirlerine yakındır(feature simulatirty)" prensibine dayanmaktadır.

Kullanım Senaryoları

  • Etiketli ve küçük veri setlerinde kullanılmaktadır.
  • Büyük veri setlerinde kullanılması mantıklı değildir.

Nasıl Çalışır?

  1. Mesafe Hesaplama:

    • Input olarak alınan yeni veri noktası ile eğitim veri setindeki her bir nokta arasındaki mesafe hesaplanır.
    • Mesafenin hesaplanması için veri seti içeriğine göre farklı mesafe metrikleri kullanılmaktadır:
      • Öklid Mesafesi(Euclidean)
      • Manhattan Mesafesi
      • Minkowski Mesafesi
      • ...
  2. En Yakın Komşunun Seçilmesi:

    • Mesafenin en kısa olduğu hangi kaç en yakın komşuya bakılacağını belirleyen k nokta belirlenir.

    • k değeri, beraberlik sorunlarının önüne geçmek için tek sayı olarak seçilmelidir.

    • k değerini belirlemek modelin performansını ve doğruluğuna direkt etki edeceği için önemli bir hiperparametredir. K değerinin nasıl seçilmesi gerektiği, veri setinin yapısına, problemin türüne ve hedeflenen doğruluk oranına bağlı olarak değişiklik göstermektedir.

      • Küçük k değeri = daha az karmaşık model = overfitting(aşırı öğrenme) riski
      • Büyük k değeri = daha fazla karmaşık model = underfitting(eksik öğrenme/genelleme yapma) riski
    • k değerinin en uygun belirleme işlemine hiperparametre optimizasyonu(hyperparameter optimization) denilmektedir.

  3. Sonucun Elde Edilmesi:

    • Sınıflandırma: En yakın k adet komşunun sınıfları arasında çoğunluk oylaması yapılır ve yeni veri noktası bu oylamayı kazanan sınıfa atanır. - Regresyon: En yakın k adet komşunun hedef değerlerinin ortalaması alınır ve yeni veri noktası için bir tahmin yapılır.

KNN Örneği:

veriseti

20 satırdan ve 3 (2 numerik + 1 etiket) sütundan oluşan çiçeğin(gül) 30 gün içerisinde solup solmadığını gösteren veri seti.

Örneğin yukarıdaki gibi etiketli olan bir veri setimiz olsun. Amacımız, bir sonraki verinin hangi sınıfa dahil olduğunu bulmak olsun. Başka bir deyişle elimize aynı türden bir çiçeğin mineral oranı ve yağış oranı özellikleri gelcek ve biz de bu çiçeğin 30 gün içerisinde solup solmayacağını tahmin edeceğiz.

KNN Sınıflandırma Grafiği(Features ekseninde)

Problem: Bu gül 30 gün içerisinde solacak mı? Solmayacak mı?

Elimize bir gülün değerleri geldi:
  • Yeni değerler: yağış(x) oranı = 50, mineral(y) oranı = 25
Çözüm:
  1. Her bir veri noktası için öklid uzaklıklarını hesaplarız:

    • d(x,Xi)=j=1d(xjXij)2 d(x, X_i) = \sqrt{\sum_{j=1}^d (x_j - X_{ij})^2}

    Örneğin ilk 2 satır için hesaplamak istersek:

    1. Veri Noktası (X₁): (5, 10)

    Formül:

    d(50,25)=(505)2+(2510)2d(50, 25) = \sqrt{(50 - 5)^2 + (25 - 10)^2}

    Hesaplama:

    d=(45)2+(15)2d = \sqrt{(45)^2 + (15)^2} d=2025+225d = \sqrt{2025 + 225} d=225047.43d = \sqrt{2250} \approx 47.43
    1. Veri Noktası (X₂): (15, 12)
      Formül: d(50,25)=(5015)2+(2512)2d(50, 25) = \sqrt{(50 - 15)^2 + (25 - 12)^2} Hesaplama: d=(35)2+(13)2d = \sqrt{(35)^2 + (13)^2} d=1225+169d = \sqrt{1225 + 169} d=139437.34d = \sqrt{1394} \approx 37.34

    Bu işlemleri tüm veri noktalarımız için uygulayacak olursak:

    veriseti

    Yeni verimiz için veri setimizdeki tüm veri noktalarına olan öklid mesafeleri.

Örneğin k=3 değeri için; 5.satır'daki veri noktamız, 6.satır'daki veri noktamız ve 20. satırdaki veri noktamız oylamaya katılacaktır.

KNN Grafiği (k = 3)

Grafikten de görebileceğimiz gibi bu en yakın 3 veri noktamız sağlıklı sınıfına ait olduğu için yeni verimizi de sağlıklı olarak kabul edebiliriz.


Problem 2: Bu gül 30 gün içerisinde solacak mı? Solmayacak mı?

Elimize bir gülün değerleri geldi:
  • Yeni değerler: yağış(x) oranı = 68.33, mineral(y) oranı = 28.56
Çözüm:

Her bir veri noktamız için öklid mesafelerini bulacak olursak :

veriseti

Yeni verimiz için veri setimizdeki tüm veri noktalarına olan öklid mesafeleri(Yeni değerler: yağış(x) oranı = 68.33, mineral(y) oranı = 28.56).

k=3 değeri için; 1. satır'daki veri noktamız, 16. satır'daki veri noktamız ve 17. satırdaki veri noktamız oylamaya katılacaktır.

KNN Grafiği (Yeni Nokta, k = 3)

Sonuç: Grafikten de görülebileceği gibi k=3 için oylamaya katılan 2 veri noktamız solmuş sınıfına ait iken 1 veri noktamız sağlıklı sınıfına aittir. Bu yüzden çoğunluğa uyarak, bu yeni veri noktamız da Solmuş sınıfına ait olduğunu buluruz.


Jupyter Notebook Üzerinden Örnek

  • Aynı Veri setimizi kullanarak yeni değerleri: yağış(x) oranı = 15.0, mineral(y) oranı = 12.5 olan gül için tespitte bulunacak olursak.

    veriseti
    jupyter notebook'da KNN örneği.

Okuduğunuz için teşekkürler, bir sonraki yazıda görüşmek üzere.