이번 게시글에서는 K-최근접 이웃(KNN, K-Nearest Neighbors) 알고리즘에 대해 다뤄보겠습니다.
KNN은 지도 학습(Supervised Learning) 알고리즘 중 하나입니다.
간단하지만 강력한 Classification 및 Regression 기법으로 널리 사용됩니다.
KNN은 새로운 데이터 포인트가 주어졌을 때, 가장 가까운 K개의 데이터를 찾아 다수결 혹은 평균을 통해 결과를 예측하는 방식입니다.
분류(Classification): 다수결을 통해 가장 많은 클래스를 선택
회귀(Regression): K개의 평균을 계산하여 값을 예측
KNN의 핵심 개념:
거리를 측정하여 가까운 데이터 포인트(K개)를 찾음
분류 문제에서는 가장 많이 등장한 클래스로 예측
회귀 문제에서는 K개의 평균 값으로 예측
KNN 실습: 간단한 분류 모델 만들기
분류모델을 만들어 KNN을 실습해보고 실제 데이터를 넣고 예측해보겠습니다.
단순 KNN모델을 위해 데이터의 개수는 작으며 테스트 데이터로 학습을 시킨 후 값을 넣어보겠습니다.
데이터는 이미 오버핏팅 된 거라고 생각하시면 됩니다. 단순 구현을 위함입니다.
데이터 준비
bream
smelt
length = bream_length + smelt_length
weight = bream_weight + smelt_weight
fish_data = [[l,w] for l,w in zip(length,weight)]
#fish_data 사실상 모든 데이터를 df형태로 만들었다고 생각하면 됩니다.
Annotations
fish_target = [1] *35 + [0] *14
머신러닝에서 어노테이션은 데이터에 라벨을 다는 작업입니다.
KNN 모델 생성 및 학습
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
KNN모델을 가져오고 kn에 객체를 할당했습니다. default값으로 n_neighbors =5 입니다.
여기서 n_neighbors는 데이터를 몇 개 참조 할 것인지에 대한 것 입니다.
예측 수행
kn.fit(fish_data,fish_target)
kn.score(fish_data,fish_target)
#정확도가 1이 나오기는 힘들다. 이 예제는 너무 극단적인 일부의 예시라 1이 나올 수 있음
kn.predict([[30,600]])
예측을 하게 되면 array로 결과값이 나옵니다.
예측한것을 알 수 있습니다.
실전 KNN: 붓꽃(Iris) 데이터셋 활용
간단하게 구현을 해봤습니다. 이번에는 파이썬에서 iris.data를 가져오겠습니다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
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 모델 생성 (K=5)
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:.4f}')
이번 게시글에서는 KNN 알고리즘의 개념과 Python 실습을 진행해 보았습니다.
'Machine-Learning' 카테고리의 다른 글
Linear Regression _ 선형 회귀 (1) | 2025.03.26 |
---|---|
K-NN Regression _ K-최근접 이웃 회귀 (0) | 2025.03.26 |
Scaling ? Z-score (0) | 2025.03.19 |
데이터 전처리, 데이터셋 나누기 (0) | 2025.03.19 |