Devxplorer – 세상을 분석하는 개발자의 탐험기

IT, 경제, 인물, 건강 – All Explored

Devxplorere 자세히보기

IT (IT)🤖🧠/AI

k-Nearest Neighbors (KNN) 알고리즘과 Python 라이브러리 활용법

데브엑스플로러 2025. 3. 22. 12:41
728x90
반응형

1. k-Nearest Neighbors (KNN) 알고리즘이란?

k-Nearest Neighbors(KNN) 알고리즘은 지도 학습(Supervised Learning)에서 사용되는 대표적인 분류(Classification) 및 회귀(Regression) 알고리즘 중 하나입니다. 새로운 데이터가 주어졌을 때, 기존 데이터 중 가장 가까운 k개의 이웃 데이터를 찾아 다수결(분류) 또는 평균(회귀)을 통해 예측하는 방식입니다.

✅ KNN의 주요 특징

  • 단순하고 직관적인 알고리즘
  • 비선형 데이터에도 효과적
  • 모델 학습이 필요 없는 Lazy Learning 방식
  • 거리 기반 측정(Euclidean, Manhattan, Minkowski 등) 사용

2. KNN 알고리즘의 동작 원리

KNN 알고리즘의 동작 과정은 다음과 같습니다:

  1. 예측하고자 하는 데이터와 기존 데이터 간의 거리를 계산합니다.
  2. 가장 가까운 k개의 데이터(이웃)를 찾습니다.
  3. 다수결(분류) 또는 평균(회귀) 방식으로 결과를 결정합니다.
  4. 최종 예측값을 반환합니다.

🔹 거리 측정 방식

  • 유클리드 거리 (Euclidean Distance): 가장 일반적인 거리 계산법
  • 맨해튼 거리 (Manhattan Distance): 축을 따라 이동하는 거리
  • 민코프스키 거리 (Minkowski Distance): 일반화된 거리 계산법

3. Python을 활용한 KNN 알고리즘 구현

KNN 알고리즘을 구현할 때 가장 많이 사용되는 Python 라이브러리는 scikit-learn입니다. scikit-learn은 다양한 머신러닝 알고리즘을 쉽게 사용할 수 있도록 도와주는 라이브러리입니다.

IRIS

🔹 설치 방법

pip install scikit-learn

🔹 KNN 분류(Classification) 예제 코드

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 데이터 로드 및 전처리
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# KNN 모델 학습 및 예측
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f'KNN 모델 정확도: {accuracy:.2f}')

🔹 KNN 회귀(Regression) 예제 코드

from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error
import numpy as np

# 데이터 생성
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 3, 5, 4, 6])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# KNN 회귀 모델 학습 및 예측
knn_reg = KNeighborsRegressor(n_neighbors=2)
knn_reg.fit(X_train, y_train)
y_pred = knn_reg.predict(X_test)

# MSE 평가
mse = mean_squared_error(y_test, y_pred)
print(f'KNN 회귀 모델 MSE: {mse:.2f}')

4. KNN 알고리즘의 장점과 단점

✅ 장점

  • 간단하고 이해하기 쉬움
  • 선형 분리가 어려운 데이터에서도 성능이 우수
  • 훈련 시간이 거의 없음 (Lazy Learning)

❌ 단점

  • 데이터가 많아질수록 계산량 증가
  • 고차원 데이터에서는 거리 기반 계산의 성능 저하 (차원의 저주 문제)
  • 적절한 k 값 선택이 중요 (과적합 또는 과소적합 방지 필요)

5. KNN 알고리즘의 최적화 방법

  1. k 값 조정: 일반적으로 홀수 사용, Grid Search를 활용하여 최적의 k 찾기
  2. 거리 측정 방식 변경: 데이터 특성에 따라 Euclidean, Manhattan 등 선택
  3. 차원 축소(PCA, t-SNE): 고차원 데이터의 경우 차원을 줄여 계산 효율성 증가
  4. 가중치 부여: 가까운 이웃일수록 더 높은 가중치를 부여하여 성능 향상

6. 결론

k-Nearest Neighbors(KNN) 알고리즘은 간단하면서도 강력한 머신러닝 모델로, 특히 분류와 회귀 문제에서 유용하게 활용됩니다. Python의 scikit-learn 라이브러리를 활용하면 KNN 모델을 쉽게 구현하고 실험할 수 있습니다.

📢 더 많은 머신러닝 알고리즘과 Python 라이브러리 활용법이 궁금하다면 구독하고 업데이트를 받아보세요! 🚀

반응형