오답노트

[ML] KNN - KNeighborsRegressor 본문

Python/ML

[ML] KNN - KNeighborsRegressor

권멋져 2022. 8. 23. 20:09

KNeighborsRegressor

KNN 회귀 알고리즘이다. 수치데이터를 예측할 수 있다

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import *

path = 'boston.csv'
data = pd.read_csv(path)
data.drop(['black'], axis = 1, inplace = True)

target = 'medv'
x = data.drop(target,axis=1)
y = data[target]

x_train, x_val, y_train, y_val = train_test_split(x,y,test_size= .3, random_state= 2022)

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
x_train_s1 = scaler.fit_transform(x_train)
x_val_s1 = scaler.transform(x_val)

from sklearn.preprocessing import StandardScaler
scaler2 = StandardScaler()
x_train_s2 = scaler2.fit_transform(x_train)
x_val_s2 = scaler2.transform(x_val)

model = KNeighborsRegressor()
model.fit(x_train_s1,y_train)
pred = model.predict(x_val_s1)

print(mean_absolute_error(y_val,pred))
print(mean_absolute_percentage_error(y_val,pred))
print(mean_squared_error(y_val,pred,squared=False))

'''
3.035
0.16339021011462934
4.227564933050456
'''

KNN을 사용하기 위해선 데이터가 스케일링이 되어 있어야 한다.

 

19~27 줄을 확인해보면 Nomalize 방식과 Standard 방식으로 스케일링을 하였다.

 

29~31 줄에서 KNN 객체를 생성하여 스케일링한 데이터로 모델링 후, 예측한다.

 

33~35 줄에서 모델의 성능을 평가한다.

 

Hyper Parameter

k 값이나 거리 계산법을 사용자가 직접 지정하여 사용할 수 있다.

 

k 는 데이터 개수의 제곱근

거리 계산법은 유클리디안 거리법과 맨해튼 거리법을 사용했다

 

k = int(x_train.shape[0] ** (1/2))

model2 = KNeighborsRegressor(n_neighbors=k,metric='manhattan')
model2.fit(x_train_s2,y_train)
pred2 = model2.predict(x_val_s2)

print(mean_absolute_error(y_val,pred2))
print(mean_absolute_percentage_error(y_val,pred2))
print(mean_squared_error(y_val,pred2,squared=False))

'''
3.1344298245614026
0.17818090956683844
4.475827476030737
'''

model3 = KNeighborsRegressor(n_neighbors=k,metric='euclidean')
model3.fit(x_train_s1,y_train)
pred3 = model3.predict(x_val_s1)

print(mean_absolute_error(y_val,pred3))
print(mean_absolute_percentage_error(y_val,pred3))
print(mean_squared_error(y_val,pred3,squared=False))

'''
3.4578947368421056
0.19219441055469952
4.873803855187795
'''

 

KNeighborsRegressor에서

n_neighbors 옵션은 k 값을 의미한다 default 값은 5이다.

metric 옵션은 거리법을 선택할 수 있다. 기본은 minkowski이다.

 

'Python > ML' 카테고리의 다른 글

[ML] 범주형 데이터 모델 평가 방법  (0) 2022.08.23
[ML] 로지스틱 회귀(Logistic Regression)  (0) 2022.08.23
[ML] KNN (K-Nearest Neighbors)  (0) 2022.08.23
[ML] 선형회귀 (Linear Regression)  (0) 2022.08.22
[ML] 모델링 개요  (0) 2022.08.22