KNN 소개
Coddy의 머신 러닝 입문 코스 레슨. 19개 중 6번째.
K-최근접 이웃(K-Nearest Neighbors, KNN)은 분류와 회귀 문제 모두에 사용되는 지도 학습 알고리즘입니다. 간단하면서도 강력하며, 종종 더 복잡한 모델의 기준점(baseline)으로 사용됩니다.

KNN 알고리즘은 거리 측정 방식을 사용하여 특정 데이터 포인트와 가장 가까운 이웃을 식별함으로써 특성 유사성을 찾습니다. 예를 들어, 비슷한 맛을 가진 와인들을 함께 그룹화하는 것처럼, 가장 가까운 와인들과 비교하여 와인을 분류할 수 있습니다. 이는 가장 공통적인 특징을 바탕으로 어떤 와인들이 서로 비슷한지 찾도록 도와주는 가이드가 있는 것과 같습니다. 🍷
KNN의 기본 아이디어는 매우 간단합니다:
- 거리 계산(Distance Calculation): 주어진 테스트 포인트에 대해, 알고리즘은 해당 포인트와 훈련 데이터셋의 다른 모든 포인트 사이의 거리를 계산합니다. 거리는 유클리드(Euclidean) 거리나 맨해튼(Manhattan) 거리 등 다양한 방식으로 계산될 수 있습니다.
- 최근접 이웃 찾기(Find Nearest Neighbors): 그런 다음 알고리즘은 훈련 데이터에서 테스트 포인트와 가장 가까운
k개의 포인트를 선택합니다.k는 사용자가 정의하는 상수이며, 어떤 정수든 될 수 있습니다. - 예측하기(Make Prediction): 분류의 경우, 알고리즘은 테스트 포인트에 대해
k개의 최근접 이웃 중 가장 흔한 클래스 레이블을 할당합니다. 회귀의 경우,k개의 최근접 이웃의 평균값을 할당합니다.
KNN은 게으른 학습(lazy learning) 알고리즘으로, 이는 실제로 모델을 학습하지 않는다는 것을 의미합니다. 대신, 훈련 인스턴스를 메모리에 저장하고 이를 예측에 사용합니다(다음 레슨에서 훈련 단계에 대해 다룰 것입니다). 이로 인해 KNN은 테스트 단계에서 계산 비용이 많이 듭니다.
단순함에도 불구하고 KNN은 놀라울 정도로 좋은 성능을 낼 수 있습니다. 하지만 k의 선택과 거리 측정 방식의 유형에 민감하며, 차원의 저주로 인해 고차원 데이터에서는 성능이 좋지 않습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움이 챌린지에서는 다양한 거리 계산법에 대해 배워보겠습니다.
X, y, 그리고 distance_type이라는 세 개의 변수를 받는 distances_option_calculator라는 이름의 함수를 만드세요. 이 함수는 distance_type에 따라 X와 y 사이의 거리를 반환합니다.
다음은 일반적인 거리 계산법 목록입니다:
Euclidian 거리 (가장 일반적임): 두 점 사이의 직선 거리입니다. 점들의 각 대응하는 좌표 간의 차이의 제곱의 합에 대한 제곱근입니다:

Manhattan 거리는 택시 거리(Taxicab) 또는 시가지(City Block) 거리로도 알려져 있습니다. 모든 차원에 걸쳐 점들 사이의 절대 차이의 합입니다. 각각 ( (p_1, p_2, …, p_n) )과 ( (q_1, q_2, …, q_n) )의 좌표를 가진 두 점 ( P )와 ( Q )에 대해 다음과 같습니다:


Hamming 거리: 대응하는 기호가 서로 다른 위치의 개수입니다. 주로 범주형 데이터에 사용됩니다.
예를 들어, 두 개의 이진 문자열을 살펴보겠습니다:
String 1: 1101
String 2: 1001위치별로 비교해 보면, 두 번째 위치의 비트가 서로 다름을 알 수 있습니다 (String 1은 1, String 2는 0). 다른 모든 위치는 동일합니다. 따라서 이 두 문자열 사이의 Hamming 거리는 1입니다.
distance_type은 다음 항목들을 가질 수 있습니다: "hamming", "manhattan", "euclidian".
직접 해보기
def distances_option_calculator(X, y, distance_type):
# 여기에 코드를 작성하세요
if distance_type == "euclidian":
pass
elif distance_type == "manhattan":
pass
elif distance_type == "hamming":
pass머신 러닝 입문의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러