Ana içeriğe atla

Python - KNN (Regresyon)

İngilizce olarak K-Nearest Neighbors’un kısaltması KNN olan bu sınıflandırma metodu Türkçe’ye K-En Yakın Komşuluk ismiyle geçmiştir. KNN, Denetimli Öğrenmede sınıflandırma ve regresyon için kullanılan algoritmalardan biridir. En basit makine öğrenmesi algoritması olarak kabul edilir. 


KNN algoritmasının adımları:

-İlk olarak k parametresi belirlenir. Bu parametre verilen bir noktaya en yakın komşuların sayısıdır. Örneğin: k=2 olsun. Bu durumda en yakın 2 komşuya göre sınıflandırma yapılacaktır.
-Örnek veri setine katılacak olan yeni verinin, mevcut verilere göre uzaklığı tek tek hesaplanır. İlgili uzaklık fonksiyonları yardımıyla.
-İlgili uzaklılardan en yakın k komşu ele alınır. Öznitelik değerlerine göre k komşu veya komşuların sınıfına atanır.
-Seçilen sınıf, tahmin edilmesi beklenen gözlem değerinin sınıfı olarak kabul edilir. Yani yeni veri etiketlenmiş (label) olur.

Şimdi phytonda analizime başlayabilirim. Bunun için öncelikle kullanacağım kütüphaneleri ve modülleri indiriyorum. KNN için sklearn kütüphanesinden KNeighborsRegressor modülünü indiriyorum. Analiz için “Hitters” veri setini kullanacağım.


Veriyi daha önceki analizlerden tanıdığım için ön işleme kısmını geçip model kurmaya başlıyorum. Bunun için train veri setim üzerinden modelimi kurup k değerime bakıyorum. Python k değerimi 5 olarak kabul ediyor.


Şimdi Tahmin kısmına geçiyorum: test setim üzerinden tahmin yapıp rmse değerine baktıktan sonra 1’den 10’a kadar her bir k değeri için rmse değeri hesaplayacağım. 1’den 10’a kadar tüm k değerlerimin rmse dağılımına bakıyorum. Rmse değerlerim 179 ile 271 arasında dağılıyor, yani standart sapması çok yüksek. Buradan hareketle modelin valide edilmesi gerektiği ortaya çıkıyor.


Son aşama olarak model tuning yapıyorum. Burada hem optimum k değerini bulacağız hem de 10 katlı bir cross validation gerçekleştireceğiz. Öncelikle cross validation yaptıktan sonra 1’den 30’a kadar tüm k değerlerinin içinden optimum k değerini hesaplatıyorum ve 8 çıkıyor.


Daha önce 1’den 10’a kadar tüm k değerleri için hata karelerin toplamının ortalamasını hesaplamıştım. Şimdi aynı şekilde bunu bir de valide edilmiş halini hesaplayıp karşılaştıracağım. Valide edilmiş sonuçlar 283 ile 301 arasında dar bir aralıkta değişiyor, yani daha anlamlı.


Son olarak, final modelimi kurup test hatamı hesaplıyorum ve 413 sonucuna ulaşıyorum.

Yorumlar