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.

Örnek olması açısından; e-postalar için bir spam filtresi geliştiriliyor olsun. Spam e-postaları, yalnızca başlıklarını kontrol ederek ayırt edebileceğimizi varsayalım. Yeterli sayıda e-posta, spam ve spam olmayan şeklinde elle etiketlenerek basit bir veri seti oluşturulsun. Yapmamız gereken: Gelen her yeni e-postayı, veriseti üzerindeki tüm e-postalarla karşılaştırmak ve hangilerine en çok benzediğini bulmak. Gelen e-postaya komşu olan, yani ona en çok benzeyenlerden k kadarının çoğunluğu ne olarak etiketlenmişse (spam veya spam olmayan), gelen e-posta için de aynı etiket kabul edilmelidir. Bu şekilde her yeni e-postanın spam olup olmadığı belirlenir.

Image for post
Image for post
K-NN’nin uygulanması (kaynak)

Algoritmanın adımlarını özetlersek:

  1. k değerinin belirlenmesi,

k sayısı, genellikle üzerinde çalışılan probleme ve verisetine göre, kendine özgü olarak belirlenmektedir.

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.

Image for post
Image for post
Iris çiçeklerinin setosa, versicolor ve virginica türleri (kaynak)

Verisetini aşağıdaki gibi görselleştirmek mümkün:

Image for post
Image for post
Iris örneklerinin, sepal ve petal özelliklerine göre dağılımı.

K-NN Algoritmasını, basit bir sınıf yapısıyla oluşturabiliriz:

  • dist: Veriseti üzerindeki iki satırın/örneğin özellik değerlerinin uzaklığını hesaplamaktadır. Bunun için Öklid uzaklık formülü kullanılmaktadır.

Uygulamayı çalıştırmak için:

Verisetinden 50 veriyi (%33) test örneği olarak ayırdık. Tahmin edilen örnekler için bir hata matrisi çizdirelim:

Image for post
Image for post
Confusion matrix (Hata Matrisi)

Hata matrisine inceleyerek; setosa ve versicolor türlerinden toplam 34 örneği doğru şekilde sınıflandırırken, aslında virginica türünde olan 16 örnekten 1'inin versicolor olarak yanlış sınıflandırıldığını söyleyebiliriz.

K-NN algoritmasını farklı şekillerde ve tabi daha hassas veri bilimcisi öngörüleriyle uygulamak mümkün. Bu yazıda ana mantığını basitçe anlatmaya çalıştım.

Okuduğunuz için teşekkür ederim.

Written by

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