Makine Öğrenmesi - II. Doğrusal Olmayan İlişkiler (Non-Linear Relationships)

K-En Yakın Komşu Regresyonu (KNN) - Model Ayarı

Yayın tarihi :04-Oca-22
Bölüm kodlarını ve/veya veri setlerini indir.

K-En Yakın Komşu Regresyonu (KNN) işlemlerinde komşu sayısı varsayılan olarak 5 değerini almaktadır. Komşu sayısı değiştiğinde(arttığında veya azaldığında) model başarı oranı da değişmektedir. Komşu sayısı değiştiğinde başarı oranını gözlemleyebilmek için iki yöntem kullanılabilir. Bunlar;

  • Bir döngü oluşturarak en uygun komşu sayısı bulunabilir. (Örnek-1)
  • GridSearchCV kütüphanesi kullanılarak en iyi komşu sayısı bulunabilir. (Örnek-2)

Örnek-1: Adverstising veri setine uygulanacak KNN Regresyon modelinde en uygun komşu sayısını döndü kullanarak bulalım.

import pandas as pd
import numpy as np
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error,r2_score,mean_absolute_error

from sklearn.neighbors import KNeighborsRegressor
#Veri seti ataması yapıldı
df=pd.read_csv("advertising.csv")

#x ve y değerleri ataması yapıldı
x,y=df.drop("Sales",axis=1),df[["Sales"]]

#train ve test verileri ataması yapıldı
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=13,test_size=0.2)
#En yakın komşu sayısını bulmak için oluşturulan döngü

mse=[] #mean_squared_error listesi
r2=[] #r2_score listesi
count=[] #komşu sayısı listesi

for i in np.arange(1,25,1): #1 den 25'e kadar tam sayılar
    KNN=KNeighborsRegressor(n_neighbors=i)
    KNN.fit(x_train,y_train)
    predict_KNN=KNN.predict(x_test)
    count.append(i)
    mse.append((mean_squared_error(y_test,predict_KNN))**.5)
    r2.append(r2_score(y_test,predict_KNN))
    
datas={"n_neighbors":count,"mean_squared_error":mse,"r2_score":r2}
result=pd.DataFrame(data=datas)
result.sort_values("r2_score",ascending=False).head(5) #r2_score değerine göre sıralamayap

Çıktı:

Yukarıdaki tabloda da görüldüğü gibi en iyi komşu sayısı bu model için 2'dir. 

Örnek-2: Adverstising veri setine uygulanacak KNN Regresyon modelinde en uygun komşu sayısını GridSearchCV kütüphanesi kullanarak bulalım.

! GridSearchCV kütüphanesi ile bir tahmin edici model üzerinde bulunan parametrelerden en uygun olanı bulunabilir. İlgili parametreler sözlük içersinde girdi yapılır.


Kullanımı için GridSearchCV kütüphanesinin içe aktarılması gerekmektedir.

from sklearn.model_selection import GridSearchCV

Söz dizimi: GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)

  • estimator, tahmin için kullanılan modelin adını temsil eder.
  • param_grid, ilgili modelin hangi parametresi üzerinde işlem yapılacağını temsil eder. Sözlük biçiminde girilebilir.
  • cv, çapraz doğrulama yapar.

import pandas as pd
import numpy as np
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error,r2_score,mean_absolute_error
from sklearn.model_selection import GridSearchCV

from sklearn.neighbors import KNeighborsRegressor
#Veri seti ataması yapıldı
df=pd.read_csv("advertising.csv")

#x ve y değerleri ataması yapıldı
x,y=df.drop("Sales",axis=1),df[["Sales"]]

#train ve test verileri ataması yapıldı
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=13,test_size=0.2)
#Model ataması yapıldı
KNN=KNeighborsRegressor()

#GridSearchCV kütüphanesinin değerlendirmesi istenilen parametreler sözlük içinde belirtilir.
paramaters={"n_neighbors":np.arange(1,25,1)} #n_neighbors parametresi üzerinde çalışacağız.

#GridSearchCV ataması yapıldı
GSC=GridSearchCV(KNN,param_grid=paramaters,cv=4)

#GridSearchCV ile en iyi parametre değerini bulmak için eğitme işlemi yapılır
GSC.fit(x_train,y_train)

Çıktı:

GridSearchCV(cv=4, estimator=KNeighborsRegressor(),
             param_grid={'n_neighbors': array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20, 21, 22, 23, 24])})
#best_params_ ile en iyi parametre değerleri listelenebilir.
GSC.best_params_

Çıktı:

{'n_neighbors': 2}

Yukarıdaki tabloda da görüldüğü gibi bu yöntemle de en iyi komşu sayısı 2 olarak bulunmuştur. 

Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.