K En Yakın Komşu (K-NN) Sınıflandırma
Merhabalar bu yazımda sizlere K-En Yakın Komşu Algoritmasıyla Python dilinde bir uygulama göstereceğim.
KNN algoritması sınıflandırılmak istenen bir veriyi daha önceki verilerle olan yakınlık bağlantısına göre sınıflandıran bir algoritmadır. Buradaki K komşuluk sayısını temsil etmektedir. Öncesinde sınıflandırma problemleri için ortaya çıkmış daha sonra regresyon problemlerin uyarlanmıştır. Oldukça eskiden tarihlerde kullanılmaya başlanmış fakat günümüzde halen etkisini devam ettirmektedir.
Problemimiz siyah noktanın hangi sınıf içerisinde yer alacağını belirlemek. Hedefimiz bunun için en uygun k komşuluk değerini belirli metrik ölçücüler yardımı ile bulmak ve modelimizi bu değere göre oluşturmak olacak. En uygun, yakın çözümü Öklid Uzaklığı ile bulacağız.
İki nokta arasındaki doğrusal uzaklığa Öklid uzaklığı denir ve n boyutlu Öklid uzayında X = (X1,X2,..,Xn) ve Y = (Y1,Y2,…,Yn) olmak üzere Öklid uzaklığı formülü;
ile hesaplanır. Şimdi de Python ile uygulamasına bakalım;
Yapacağımız uygulama vücut kitle indeksi(BMI) değerine göre sınıflandırma olacak. Önce vücut kitle indeksi hakkındaki bilgilerimizi verelim;
BMI hesaplamada kilonun, boy değerinizin karesine bölünmesiyle hesaplanır.
- BMI değeri 18.5 in altında olanlar: Zayıf (0)
- BMI değeri 18.5 - 24. 9 arasında olanlar: Normal kilolu (1)
- BMI değeri 25 - 29.9 arasında olanlar: Fazla kilolu (2)
- BMI değeri 30 - 39.9 arasında olanlar: Obez (3)
- BMI değeri 40 üzerinde olanlar: İleri derecede obez (morbid obez) (4)
olarak tanımlanır. Veri setine sizlerde ulaşmak isterseniz buradan ulaşabilirsiniz.
Kullanacağımız kütüphaneleri dahil etmekle başlayalım;
Verilerin okunması;
Veri setinde Height değişkeni kişinin boyunu temsil ederken inç ile verilmiş, Weight değişkeni kişinin ağırlığını temsil etmekte ve pound cinsinden verilmiştir. Öncelikle boy değişkenini cm cinsinden, kilo değişkenini de kilogram cinsine çevrilmesine bakalım (1 kg = 2.2046 lb ,1 inç = 2,54 cm);
Dönüşümlerimizi yaptıktan sonra da tablo haline getirip son durumlarına bakalım;
Her bir kişinin BMI değerini bulalım ve tablomuza bunu dahil edelim;
Yukarıda BMI değerleri hakkında verilen bilgileri koda dökerek tablomuza ekleyelim;
Train ve test verilerini ayırmadan önce bağımlı ve bağımsız değişkenlerimiz belirleyelim;
Değişkenlerimiz belirledikten sonra %20 test veri seti ve %80 train veri seti olarak ayıralım ;
Örnek olması için k = 2 komşuluğunda bir komşuluk deneyelim ve modelimiz buna göre uyarlayalım;
Ayırmış olduğumuz verileri knn değişkenine fit edelim ve X’in test verileri ile tahmin edilen ilk 5 değer inceleyelim;
Tahmin edilen ilk 5 değer bizlere 2.sınıfta olanların(Fazla kilolu) ve 1.sınıfta(Normal kilolu) olduğunu söylemektedir.
k = 2 iken iken kurmuş olduğumuz komşuluk değerinin başarı ölçüsüne Accuracy Score yardımı ile bakalım;
Accuracy score ile elde ettiğimiz değer 0.994 yani %99.4 başarı ile tahmin etmektedir. En uygun komşuluğu bulmak için 1'den 10'a kadar k komşuluk sayısını deneyelim;
Elde ettiğimiz başarı değerleri sırasıyla; 0.997, 0.994, 0.9935, 0.9915, 0.993, 0.991, 0.99, 0.9855, 0.9875 bulundu. En iyi komşuluk 1 iken elde edildi birde bunu görsel olarak gösterelim;
En iyi değeri k komşuluk değeri 1 iken elde ettik. O zaman son olarak k = 1 iken komşuluğumuz kurup tahmin edelim;
Son olarak tahmin etmek istediğimiz değerleri fonksiyon yardımıyla deneyelim;
Vaktinizi ayırdığınız için teşekkürler.