본문 바로가기
파이썬/머신러닝-지도학습

파이썬 머신러닝 지도학습 - K-Nearest Neigbor(KNN) (분류, 회귀)

by 큰고양2 2023. 9. 16.

K-Nearest Neigbor

데이터를 가장 가까운 거리의 k개의 이웃과 비교하여 결정하는 알고리즘으로

k의 값이 커지면 커질수록 전체평균에 가까워진다

 

 

거리를 계산 할 때 데이터의 크기를 기준으로 거리를 계산하기 때문에

만약 입력 데이터와 예측 데이터의 크기 범위가 다르다면 서로의 거리 계산이 달라 질 수 있기 때문에

데이터의 정규화가 필요하다

 

데이터의 정규화

https://bigcat5312.tistory.com/80

 

파이썬 머신러닝 지도학습 - 데이터 분리 (sklearn - train_test_split

import from sklearn.model_selection import train_test_split train_test_split 데이터를 머신러닝에 사용하기 위해서 학습 데이터와 테스트 데이터를 무작위로 분리하는 함수로 train_test_split(x , y, test_size = or train_siz

bigcat5312.tistory.com

코드를 사용하여 x_train , x_test를 가지고 있는 상태로

학습시킬 데이터인 x_train을 기준으로 정규화를 진행한다

정규화 공식은 (x - xmin ) / (xmax -xmin)이다

x_min = x_train.min()
x_max = x_train.max()


x_train = (x_train - x_min) / (x_max - x_min)
x_test = (x_test - x_min) / (x_max - x_min)

으로 직접 구해도 되고

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)

MinMaxScaler 함수를 사용해도 된다

 

모델링

분류

from sklearn.neighbors import KNeighborsClassifier

회귀

from sklearn.neighbors import KNeighborsRegressor

코드로 임포트 한 다음

#회귀
model = KNeighborsRegressor(n_neighbors = , weights= , algorithm= , p= , metric =  )
#분류
model = KNeighborsClassifier(n_neighbors = , weights= , algorithm= , p= , metric = )

로 모델을 선언한다

각각 파라미터는

  1. n_neighbors: 이웃 수를 지정 기본값 5
  2. weights: 예측에 사용되는 가중치 함수를 지정  - 'uniform' (모든 포인트에 동일한 가중치), 'distance' (거리에 반비례하는 가중치), 사용자 정의 , 기본값 = uniform
  3. algorithm: 가장 가까운 이웃을 계산하기 위해 사용되는 알고리즘을 지정 ('auto', 'ball_tree', 'kd_tree', 'brute' 중에서 선택). 기본값 = auto
  4. p: 거리 측정 방법을 결정하는 파라미터 (1: 맨해튼 거리, 2: 유클리드 거리)  기본값 = 2
  5. metric: 트리에 사용할 거리 메트릭을 지정("manhattan","chebyshev","euclidean" , "minkowski") 기본값="euclidean"

이다 만약 기본 설정을 그대로 쓸 생각이라면 그냥 함수명()으로 선언해도 된다

 

학습 및 예측

model.fit(x_train, y_train)

fit매소드로 학습을 시킬 수 있다

이후

y_pred = model.predict(x_test)

코드를 사용하여 완성된 모델에 x_test를 넣어 예측값을 생성 할 수 있다

 

평가

from sklearn.metrics import *

코드로 평가 함수들을 임포트 한 다음

https://bigcat5312.tistory.com/77

 

머신러닝 지도학습 - 회귀와 분류, 분석도구

회귀(Regression) 이미 결과값이 있는 데이터를 사용하여 연관성을 찾아 연속적인 숫자를 예측해 내는 것 ex) 집값 분석도구 평가도구 LinearRegression KNeighborsRegressor DecisionTreeRegressor RandomForestRegressor XG

bigcat5312.tistory.com

게시글을 참고하여 원하는 평가함수(y_test , y_pred)를 사용해 평가 할 수 있다