K-최근접 이웃 알고리즘은 주변 K개의 이웃 데이터를 통해 예측을 수행하는 분류 / 회귀형 머신러닝 알고리즘이다.
KNeighborsClassifier
KNeighborsClassifier는 K-최근접 이웃 알고리즘을 수행하는 분류형 클래스이다.다음과 같은 예시로 KNeighborsClassifier의 동작 원리를 알아보자.
import pandas as pd
# 빈 데이터프레임 객체 생성
X = pd.DataFrame()
print(X)
X['rate'] = [0.3, 0.8, 0.0999]
print(X)
X['price'] = [10000, 5000, 9500]
print(X)
# 종속변수 생성
y = pd.Series([0, 1, 0])
# 스케일 전처리 과정을 수행
# - price 컬럼의 값을 rate 컬럼의 값과 동일한 범위를 가지도록
# 데이터를 수정
# (데이터의 값은 수정되지만 원본 값에서 가지는 상대적인 크기는 유지)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(X)
X = scaler.transform(X)
KNeighborsClassifier 클래스를 불러와 모델 객체를 생성한다.
from sklearn.neighbors import KNeighborsClassifier
# 가장 인접한 1개의 데이터를 기준으로 판단
model = KNeighborsClassifier(n_neighbors=1)
model.fit(X, y)
예측할 데이터를 스케일 처리한 후 예측을 수행한다.
# 예측할 데이터
X_new = [[0.81, 7000]]
# 예측할 데이터의 스케일 처리를 수행
X_new = scaler.transform(X_new)
# 예측 수행
pred = model.predict(X_new)
print(pred) # 1
X_new의 예측 결과로 1이 출력되었는데 이는 어떻게 나온 결과일까?
※ 최근접 이웃 알고리즘의 학습 및 예측 방법
- 학습 : fit 메소드에 입력된 데이터를 단순 저장
- 예측 : fit 메소드에 의해 저장된 데이터와 예측할 데이터와의 유클리드 거리를 계산하여 가장 인접한 이웃 K개를 추출한다. 그리고 추출된 이웃의 y값을 이용하여 분류인 경우 다수결, 회귀인 경우 평균값을 결과로 한다.
KNeighborsRegressor
KNeighborsRegressor는 K-최근접 이웃 알고리즘을 수행하는 회귀형 클래스이다.
KNeighborsClassifier와 다른 점은 다수결이 아닌 평균값을 리턴하는 것이다.
다음과 같은 예시로 KNeighborsRegressor의 동작 원리를 알아보자.
import numpy as np
# 1차원 배열
X = np.arange(1,11)
print(X)
# 1차원 배열을 2차원으로 수정
X = X.reshape(-1, 1)
print(X)
# 종속변수 - 연속된 수치형
y = np.arange(10, 101, 10)
print(y)
from sklearn.neighbors import KNeighborsRegressor
model = KNeighborsRegressor(n_neighbors=2)
model.fit(X, y)
X_new = [[3.7]]
pred = model.predict(X_new)
print(pred) # 35
X_new의 가장 가까운 이웃 2개는 3과 4로 이는 각각 30, 40의 값을 가진다. 따라서 예측값은 평균값인 35가 출력된다.
최근접 이웃 알고리즘으로 회귀분석을 했을 때의 한계점은 fit 메소드에서 입력된 X 데이터의 범위를 벗어나면 양 끝단의 값으로만 예측을 수행하게 된다 (즉, 학습 시 저장된 값 내에서만 예측이 가능하다).
X_new = [[57.7]]
pred = model.predict(X_new)
print(pred) # 95
X_new = [[-10.7]]
pred = model.predict(X_new)
print(pred) # 15
이러한 한계점이 있어 선형 방정식을 기반으로한 회귀분석 머신러닝 클래스를 자주 사용한다.
'머신러닝' 카테고리의 다른 글
[머신러닝] 선형 모델의 성능 향상을 위한 방법 (0) | 2022.04.22 |
---|---|
[머신러닝] Ridge, Lasso 클래스 (0) | 2022.04.22 |
[머신러닝] 회귀분석을 위한 선형 모델 - LinearRegression (0) | 2022.04.22 |
[머신러닝] 데이터 분석의 과정 - 머신러닝 모델의 구축 (0) | 2022.04.22 |
[머신러닝] 데이터 분석의 과정 - 개요 (0) | 2022.04.22 |