KNN 이란?
- K-최근접 이웃 (K-Nearest Neighbors, KNN) 은 분류와 회귀 분석에 사용되는 비모수적 방법
- KNN 은 간단하면서도 효과적인 알고리즘으로, 새로운 데이터 포인트를 가장 가까운 K 개의 이웃데이터와 비교하여 분류하거나 값을 예측
KNN의 주요 특징
- 비모수(non-parametric) 알고리즘:
- KNN은 사전에 데이터의 분포를 가정하지 않는 비모수적 모델입니다. 대신, 학습 데이터 자체가 모델로 사용됩니다.
- 지연 학습(lazy learning):
- KNN은 학습 과정에서 실제로 "학습"을 하지 않습니다. 대신 모든 데이터를 저장하고, 예측 시점에서 계산을 수행합니다.
- 새로운 데이터에 대해 예측할 때, 저장된 데이터를 기준으로 최근접 이웃을 계산합니다.
KNN 알고리즘 작동 방식
- 데이터 저장:
- KNN은 학습 데이터와 레이블(목표 변수)을 메모리에 저장합니다.
- 거리 계산:
- 새로운 데이터 포인트가 주어지면, 저장된 모든 학습 데이터와의 거리를 계산합니다. 가장 많이 사용하는 거리 척도는 다음과 같습니다:
- 유클리디안 거리(Euclidean Distance)
- 새로운 데이터 포인트가 주어지면, 저장된 모든 학습 데이터와의 거리를 계산합니다. 가장 많이 사용하는 거리 척도는 다음과 같습니다:
-
- 맨해튼 거리(Manhattan Distance)
- 코사인 유사도(Cosine Similarity) : 주로 텍스트 데이터에 사용
- 가장 가까운 K개의 이웃 선택:
- 거리 계산 결과를 기준으로 가장 가까운 K개의 데이터 포인트를 선택합니다.
- 분류/회귀:
- 분류: 선택된 K개의 이웃 중에서 가장 많이 등장한 클래스를 예측 결과로 반환합니다. (다수결 원칙)
- 회귀: 선택된 K개의 이웃 값의 평균이나 가중 평균을 반환합니다.
K 값의 선택
- K 값은 모델의 성능에 중요한 영향을 미칩니다.
- K가 너무 작으면:
- 모델이 노이즈에 민감해지고, 과적합(overfitting)될 가능성이 있습니다.
- K가 너무 크면:
- 모델이 지나치게 단순해져서, 데이터의 세부적인 패턴을 놓치고 과소적합(underfitting)될 수 있습니다.
- 일반적으로 홀수 값을 선택하여 동점 상황을 방지합니다.
- 최적의 K 값은 교차 검증(cross-validation)을 통해 찾는 것이 좋습니다.
- K가 너무 작으면:
KNN의 장점
- 직관적이고 이해하기 쉬움:
- 알고리즘이 단순해서 구현이 쉽고, 데이터 간의 유사성을 기반으로 예측을 수행하기 때문에 직관적입니다.
- 비선형 데이터 처리 가능:
- KNN은 데이터의 분포나 관계를 가정하지 않기 때문에, 비선형 데이터를 처리할 수 있습니다.
- 다목적:
- 분류와 회귀 모두에 사용할 수 있습니다.
- 유연성:
- 다양한 거리 척도를 선택하여 데이터 특성에 맞게 조정할 수 있습니다.
KNN의 단점
- 계산 비용이 큼:
- 학습 단계에서 데이터를 저장만 하고, 예측 시점에 모든 학습 데이터와 거리를 계산하므로, 데이터가 많거나 차원이 높으면 속도가 느려질 수 있습니다.
- 메모리 사용량이 큼:
- 모든 학습 데이터를 저장하므로 메모리 사용량이 높습니다.
- 스케일의 민감성:
- 거리 기반 알고리즘이므로, 데이터의 스케일(예: 값의 크기)에 매우 민감합니다. 이를 해결하려면 표준화(Standardization) 또는 **정규화(Normalization)**를 수행해야 합니다.
- 노이즈에 민감:
- 노이즈 데이터가 가까운 이웃으로 선택되면 잘못된 예측을 할 가능성이 있습니다.
KNN이 잘 동작하는 경우
- 데이터가 적을 때: 적은 양의 데이터로도 높은 성능을 발휘할 수 있습니다.
- 클래스 간의 경계가 명확할 때: 각 클래스가 고유한 영역에 잘 분포되어 있다면 KNN은 효과적입니다.
- 저차원 데이터: 데이터 차원이 높아지면(고차원 데이터) 거리 계산의 정확도가 떨어질 수 있습니다. 이를 해결하려면 차원 축소(예: PCA)를 사용할 수 있습니다.
KNN 활용 사례
- 추천 시스템:
- 사용자의 행동(예: 구매 기록)과 유사한 행동을 보이는 다른 사용자들을 기준으로 추천.
- 의료 진단:
- 환자의 증상이 이전 환자들과 얼마나 유사한지 비교하여 질병을 예측.
- 패턴 인식:
- 손글씨 숫자 인식, 이미지 분류 등.
- 이상치 탐지:
- 특정 데이터 포인트가 다른 데이터와 얼마나 다른지 계산하여 이상치를 탐지.
예시
- 데이터 로드 및 전처리
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 데이터 로드
data = load_breast_cancer()
X = data.data
y = data.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)
- 모델 학습
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
# 모델 생성 및 학습
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 평가
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Classification Report:\n{classification_report(y_test, y_pred)}")
print(f"Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}")
'AI > ML' 카테고리의 다른 글
[ML] 지도학습 - 분류모델 (의사결정나무) (2) | 2024.12.29 |
---|---|
[ML] 지도학습 - 분류모델 (나이브 베이즈) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (SVM) (0) | 2024.12.29 |
[ML] 지도학습 - 분류모델 (로지스틱 회귀) (3) | 2024.12.29 |
[ML] 지도학습 - 회귀 모델 (선형, 다항, 리지, 라쏘) (1) | 2024.12.28 |