본문 바로가기
AI/Machine-Learning

[sklearn] K-Nearest Neighbors

by Wikinist 2023. 8. 30.

KNN은 "K-Nearest Neighbors"의 약어로, 지도 학습(Supervised Learning) 분야에서 사용되는 간단하면서도 강력한 알고리즘 중 하나입니다. KNN은 분류(Classification)와 회귀(Regression) 모두에 사용될 수 있습니다. 데이터 간의 유사성을 기반으로 예측을 수행하는 데 사용되며, 이웃들의 다수결 또는 평균을 통해 결과를 결정합니다.

KNN 작동 방식

데이터 수집 및 전처리: 먼저, 분류나 회귀를 수행하기 위한 데이터를 수집하고 필요한 경우 전처리합니다. 데이터는 일반적으로 여러 개의 특성으로 구성되며, 각 데이터 포인트는 고유한 식별자를 가지고 있습니다.

거리 측정: KNN은 데이터 포인트 간의 거리를 측정하여 유사성을 평가합니다. 일반적으로 유클리드 거리(Euclidean distance)나 맨하탄 거리(Manhattan distance) 등의 거리 측정 방식을 사용합니다. 거리가 짧을수록 데이터 포인트들은 서로 더 유사한 특성을 가지고 있다고 판단합니다.

이웃 선택: 주어진 데이터 포인트에 대해 KNN은 가장 가까운 이웃(최근접 이웃)부터 K개의 이웃을 선택합니다. K는 사용자가 지정하는 하이퍼파라미터로, 보통 홀수로 선택하여 다수결을 결정할 수 있도록 합니다.

다수결 투표 또는 평균 계산분류 작업에서는 K개의 이웃들 중 가장 많은 클래스를 가진 클래스로 예측합니다. 회귀 작업에서는 K개의 이웃들의 값의 평균을 계산하여 예측값을 얻습니다.

결과 예측: 다수결 투표나 평균 계산을 통해 얻은 결과를 기반으로, 주어진 데이터 포인트의 클래스(분류)나 값(회귀)을 예측합니다.

KNN의 장점

간단하고 이해하기 쉬운 알고리즘입니다.
훈련 과정이 없으며, 새로운 데이터에 대한 예측이 실시간으로 가능합니다.
다양한 데이터 타입에 적용할 수 있습니다.
특별한 가정 없이도 복잡한 패턴을 학습할 수 있습니다.

KNN의 단점

데이터가 많은 경우 계산 비용이 높을 수 있습니다.
데이터의 차원이 높아지면 "차원의 저주" 문제가 발생할 수 있습니다.
이상치(outlier)에 민감하게 반응할 수 있습니다.
적절한 K값을 선택하는 것이 중요하며, 이는 경험적으로나 교차 검증을 통해 결정해야 합니다.
KNN은 간단하면서도 유용한 알고리즘이지만, 대량의 데이터나 고차원 데이터에서는 성능과 계산 비용 측면에서 주의가 필요합니다.

예제

아래는 Python을 사용한 간단한 KNN 예제 코드입니다. 이 예제는 분류 작업을 수행하는 코드입니다.

import numpy as np
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 데이터셋 로드
iris = load_iris()
X = iris.data
y = 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_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# KNN 모델 생성 및 훈련
k = 3  # 이웃의 수
knn_model = KNeighborsClassifier(n_neighbors=k)
knn_model.fit(X_train_scaled, y_train)

# 테스트 데이터로 예측
y_pred = knn_model.predict(X_test_scaled)

# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

이 코드는 scikit-learn 라이브러리를 활용하여 Iris 데이터셋을 이용해 KNN 모델을 구현하고 평가하는 예제입니다. 코드를 실행하려면 해당 라이브러리가 설치되어 있어야 합니다. 데이터의 특성을 스케일링하는 것은 KNN과 같은 거리 기반 알고리즘에서 중요합니다. 이 코드에서는 StandardScaler를 사용하여 데이터를 평균이 0이고 표준 편차가 1인 표준 정규 분포로 스케일링했습니다.

실행 결과로는 정확도가 출력될 것입니다. 이 예제 코드를 바탕으로 KNN 알고리즘의 기본적인 작동 방식과 구현 방법을 이해하실 수 있을 것입니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'AI > Machine-Learning' 카테고리의 다른 글

앙상블(Ensemble)  (0) 2023.08.30
[sklearn] 결정트리  (0) 2023.08.30
ROC curve  (0) 2023.08.30
[sklearn] 모델 성능 평가(정확도, f1)  (0) 2023.08.30
[sklearn] GridSearchCV - 파라미터 튜닝  (0) 2023.08.30