Makine Öğrenmesi - II. Doğrusal Olmayan İlişkiler (Non-Linear Relationships)
K-En Yakın Komşu Regresyonu (KNN) - Model Ayarı
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.