← AI 놀이터 홈으로

🐱 k-최근접 이웃 (k-Nearest Neighbors)

'네 주변의 가장 가까운 이웃 k명에게 물어봐!' — 학습 과정이 아예 없는 게으른 모델, 거리와 다수결만으로 분류해요.

📖 따라하기 가이드 — 1 / 7 단계

Step 1. 학습이 없는 모델?!

지금까지의 모델은 손실을 줄이며 가중치를 학습했죠. k-NN은 학습(훈련)이 아예 없어요. 데이터를 통째로 기억해 뒀다가, 새 점이 오면 그때서야 "가장 가까운 이웃 k명"을 찾아 다수결로 정합니다. 그래서 게으른 학습(lazy learning)이라고 불러요. 화면의 🔵🔴 점들이 기억된 데이터, 옅은 배경색은 "이 지역에 오면 어느 편으로 분류되는가"를 미리 칠해 본 결정 영역이에요.

🖱️ 마우스를 움직이면 ⭐ 별(새 점)이 따라다니며 그 자리의 분류 결과를 보여줘요. 클릭하면 선택한 색의 점이 추가되고, 기존 점 근처를 클릭하면 삭제돼요.

📂 데이터 꾸러미:

가로·세로축은 두 가지 특징(예: 몸무게와 키), 🔵🔴 점은 기억된 데이터예요. 옅은 배경색은 결정 영역 — 그 자리에 새 점이 오면 어느 색으로 분류되는지를 미리 칠한 지도입니다. k가 작을 때 잡음 점 주변에 생기는 반대색 섬, k가 클 때 뭉툭해지는 경계를 관찰해 보세요.

🎛️ 조절하기

클릭으로 추가할 클래스

📊 지금 상태

이웃 수 k
5명
데이터 개수
0개
⭐ 자리의 투표
—
다수결 결과
—

별을 경계 근처에 두면 투표가 3:2처럼 아슬아슬해져요 — 이웃 한 명만 바뀌어도 결과가 뒤집히는 지점이 바로 결정 경계예요.

🧪 이렇게 실험해 보세요

  1. k=1로 두고 잡음 점 위에 별을 올려 보세요 — 무조건 그 점을 따라가요
  2. 한 색의 점을 잔뜩 추가하면? — k가 클수록 소수 무리가 다수결에 먹혀요
  3. 🗑 모두 지우고 점 2~3개만으로 결정 영역이 어떻게 갈라지는지 보세요

🧮 수식과 파이썬

거리 = √((x₁−x₂)² + (y₁−y₂)²)
가장 가까운 k개의 이웃을 찾아 다수결 투표해요
🐍 파이썬 코드로 보면? (펼치기)
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

# 훈련 데이터: 2차원 좌표와 클래스 (0=파랑, 1=빨강)
X = np.array([[2.5, 6.0], [3.1, 7.2], [2.0, 5.1],
              [7.0, 3.5], [6.4, 2.8], [7.8, 4.4]])
y = np.array([0, 0, 0, 1, 1, 1])

model = KNeighborsClassifier(n_neighbors=5)  # 이웃 5명
model.fit(X, y)  # '학습'이라 쓰지만 사실은 데이터를 기억만 해요

q = [[5.0, 5.0]]                # 새 점 (쿼리)
print(model.predict(q))         # 이웃 5명의 다수결 → 예측 클래스
print(model.predict_proba(q))   # 클래스별 투표 비율