K-NN (K-Nearest Neighbors) Algoritması (Python)

Bu yazıda K-NN (K-Nearest Neighbors, K-En Yakın Komşular) algoritması kısaca tanıtılarak, Python üzerinde basit bir uygulamayla örneklenmiştir. Uygulamanın kaynak kodlarına buradan ulaşabilirsiniz.

K-NN Algoritması nedir?

K-NN (K-Nearest Neighbors) algoritması, model oluşturmaksızın; sınıflandırma ve regresyon problemlerinin her ikisi üzerinde de çalışabilen, denetimli makine öğrenmesi algoritmasıdır. Veriler üzerinde basit denebilecek bir çıkarımla tahmin yapmaktır. Bu çıkarıma göre; etiket değeri tahmin edilecek bir veri için, n-boyutlu bir uzayda, kendisine en yakın k komşunun etiket değerleri referans alınmalıdır.

K-NN’nin uygulanması (kaynak)
  1. Veriseti üzerindeki komşuların belirlenmesi,
  2. En yakın k komşunun etiket değerlerinin belirlenmesi,
  3. k komşu arasından çoğunluğun etiketine göre, yeni verinin etiketinin belirlenmesi.

Uygulama

Algoritmayı üzerinde çalıştırmak için Iris verisetini kullanabiliriz. Makine öğrenmesi alanındaki en yaygın verisetlerinden birisi olan Iris: Setosa, Versicolor ve Virginica türlerindeki 3 farklı Iris çiceğinden 50'şer örnek içermektedir. Örnekler, irislerin sepal ve petal yapraklarının genişlik ve uzunluklarından oluşan toplam 4 özelliğe (feature) sahiptir. Amaç; veriseti üzerinde test edilmek üzeren ayrılan ve etiket değeri gizli tutulan örneklerin, sepal ve petal yapraklarına göre hangi iris türüne ait olduğunun belirlenmesidir.

Iris çiçeklerinin setosa, versicolor ve virginica türleri (kaynak)
Iris örneklerinin, sepal ve petal özelliklerine göre dağılımı.
  • get_nearest_neighbors: Parametre olarak aldığı örneği, veriseti üzerindeki diğer örneklerle karşılaştırarak, herbirine olan uzaklığı hesaplamaktadır. Uzaklıkların tutulduğu distances listesi, nihayetinde en yakından uzağa doğru sıralanır ve baştan k tanesi neighbors listesine eklenerek geri döndürülür.
  • predict: Kullanıcıdan test ve eğitim örneklerini almaktadır. Bahsettiğimiz gibi K-NN algoritması, model oluşturmaksızın çalışmaktadır. Dolayısıyla buradaki eğitim örnekleri, doğrudan test örnekleriyle karşılaştırılarak kullanılmaktadır. Her bir test örneği için en yakın k komşu hesaplanır ve bunların etiket değerleri targets listesine eklenir. Listede en fazla bulunan etiket değeri de, test örneğinin etiket değeri olarak atanır ve bu şekilde tahmin edilen tüm örnekler, y_predict listesiyle geri döndürülür.
Confusion matrix (Hata Matrisi)

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store