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

K-nearest Neighbours (KNN) (K-En Yakın Komşu)

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

K-En Yakın Komşu Regresyonu (K-nearest Neighbours Regression - KNN), bağımlı değişken değerini bağımsız değişkenlerin en yakın komşularının ortalamasını alarak yaklaşık olarak tahmin eden bir yöntemdir.

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

from sklearn.neighbors import KNeighborsRegressor

Söz dizimi: KNeighborsRegressor(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)

  • n_neighbors, komşu sayısını temsil etmektedir. Default olarak 5 değerini almaktadır.

 

 Şekil-1 de kırmızı olarak işaretlenen noktanın tahmin değerini bulabilmek için "n" adet komşusunun ortalamasını alarak sonuca ulaşır.

Örnek-1: Rastgele değerleri bulunan 5000 satırlık 2 bağımsız ve 1 bağımlı değişkenden oluşan bir veri seti oluşturarak KNN Regresyonu ile Modeli eğitelim. Eğitilen modele girilecek olan 2 bağımsız değer karşılığında bağımlı değişken değerini tahmin edelim.

import pandas as pd
import numpy as np
import seaborn as sns

from sklearn.datasets import make_regression
from sklearn.neighbors import KNeighborsRegressor
#Rastgele değerli x ve y değerlerini oluşturuldu
x,y=make_regression(n_samples=5000,n_features=2,n_targets=1)

#İlk satır elemanlarını gözlemleyelim
print(f"1. satır x değerleri: {x[0:1]}")
print(f"1. satır y değeri {y[0:1]}")

Çıktı:

1. satır x değerleri: [[1.19892226 0.12587276]]
1. satır y değeri [53.21812893]
#Veri seti boyutu
print(f"x (bağımsız değişken) boyutu : {x.shape}")
print(f"y (bağımlı değişken) boyutu : {y.shape}")

Çıktı:

x (bağımsız değişken) boyutu : (5000, 2)
y (bağımlı değişken) boyutu : (5000,)
#KNN Regresyon ile model eğitimi işlemleri
#Komşu sayısını "n_neighbors" 3 olarak girelim ve Modeli eğitelim
KNN=KNeighborsRegressor(n_neighbors=3)
KNN.fit(x,y)

#Model eğitimi sonrası tahmin işlemleri
tahmin_dizisi=[[4,12]]
KNN.predict(tahmin_dizisi)

Çıktı:

array([286.94125609])

Görüldüğü gibi 4 ve 12 değerleri K-En Yakın Komşu Regresyonu ile eğitilmiş modele giridldiğinde 286.941 değeri tahmin edilmiş olundu.

Örnek-2: Adversting veri setini  K-En Yakın Komşu Regresyonu ile eğitelim.

import pandas as pd
import numpy as np
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")

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
df=pd.read_csv("advertising.csv")
df.head()

Çıktı:

#Veri setimizde boş değer olmadığı için Regresyon adımına geçebiliriz.
df.isnull().sum()

Çıktı:

TV           0
Radio        0
Newspaper    0
Sales        0
dtype: int64
x,y=df.drop("Sales",axis=1),df[["Sales"]]
x.shape,y.shape

Çıktı:

((200, 3), (200, 1))
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=13,test_size=0.2)
x_train.shape,x_test.shape,y_train.shape,y_test.shape

Çıktı:

((160, 3), (40, 3), (160, 1), (40, 1))
KNN=KNeighborsRegressor() #komşu sayısı default olarak 5
KNN.fit(x_train,y_train)
predict_KNN=KNN.predict(x_test)
(mean_squared_error(y_test,predict_KNN))**.5

Çıktı:

1.698561155802169
r2_score(y_test,predict_KNN)*100

Çıktı:

90.44693241503764

K-En Yakın Komşu Regresyonu'na göre "advertising" veri seti "Sales" sütunu değerlerini %90.44 doğrulukla tahmin etmiş olduk. Kendimiz de bir değer yazarak tahmini Sales değerini bulabiliriz.

KNN.predict([[4,5,7]]) #Tv,Radio,Newspaper değerleri

Çıktı:

array([[6.2]])
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.