Python으로 배우는 분류 기초: Softmax와 k-최근접 이웃
분류는 고양이나 개처럼 레이블을 고르는 것입니다. 모델이 클래스마다 점수를 내고 Softmax로 확률로 바꿀 수도 있고, k-최근접 이웃처럼 가장 가까운 기존 예시들이 투표하게 하는 간단한 방법도 있습니다.
쉬운 말로 이해하는 개념
분류는 고양이나 개처럼 레이블을 고르는 것입니다. 모델이 클래스마다 점수를 내고 Softmax로 확률로 바꿀 수도 있고, k-최근접 이웃처럼 가장 가까운 기존 예시들이 투표하게 하는 간단한 방법도 있습니다.
Softmax로 점수를 클래스 확률로 바꾸고, 교차 엔트로피로 평가하며, k-최근접 이웃으로 점을 분류합니다.
핵심 아이디어
- Softmax는 점수의 순서를 유지하면서 합이 1이 되게 합니다.
- 범주형 교차 엔트로피는 자신 있게 틀린 답에 가장 큰 벌점을 줍니다.
- k-NN에는 학습 단계가 없으며, 새 점을 저장된 예시와 비교할 뿐입니다.
- 나이브 베이즈와 결정 트리(지니 불순도, 정보 이득)도 대표적인 분류기입니다.
언제 사용하나요?
- 신경망과 AI 라이브러리 내부에서 무슨 일이 일어나는지 이해합니다.
- 해당 챌린지에서 직접 구현하기 전에 아이디어를 익힙니다.
- 머신러닝 강의, 면접, 프로젝트를 준비합니다.
직접 움직여 보기
왼쪽 차트의 아무 곳이나 클릭하면 가장 가까운 k개 이웃의 투표로 새 점이 분류됩니다. 오른쪽 점수를 바꾸면 Softmax가 반응합니다.
예제 코드
import math
from collections import Counter
# Softmax turns raw scores into probabilities that add up to 1.
def softmax(scores):
exps = [math.exp(s - max(scores)) for s in scores]
total = sum(exps)
return [e / total for e in exps]
probs = softmax([2.0, 1.0, 0.1])
print("softmax:", [round(p, 3) for p in probs])
# Cross-entropy is small when the true class gets a high probability.
print("cross-entropy if class 0 is right:", round(-math.log(probs[0]), 3))
# k-nearest neighbours: label a point by a vote of the closest examples.
examples = [((1, 1), "cat"), ((1, 2), "cat"), ((5, 5), "dog"), ((6, 5), "dog"), ((5, 6), "dog")]
def knn(point, k=3):
nearest = sorted(examples, key=lambda e: math.dist(point, e[0]))[:k]
return Counter(label for _, label in nearest).most_common(1)[0][0]
print("(2, 1) ->", knn((2, 1)))
print("(5, 4) ->", knn((5, 4)))
예상 출력
softmax: [0.659, 0.242, 0.099]
cross-entropy if class 0 is right: 0.417
(2, 1) -> cat
(5, 4) -> dog
작동 원리
softmax()는 점수에 지수 함수를 적용하고 그 합으로 나누므로 세 확률의 합이 1이 됩니다. 먼저 최댓값을 빼는 것은 오버플로를 막기 위해서입니다. 교차 엔트로피는 정답 클래스 확률의 −log입니다. knn()은 예시를 거리순으로 정렬하고 가장 가까운 3개가 투표하게 합니다.
값을 변경하고 Python 설치 없이 CodeUtility 온라인 Python 컴파일러에서 실행하세요.
연습 문제
입력값과 경계 조건을 바꾸고 더 큰 데이터에서도 동작을 확인하세요.
- 입력이나 가중치를 바꾸고 실행하기 전에 출력을 예상해 보세요.
- 중간 값을 출력해 계산의 각 단계를 따라가 보세요.
- 아래에 연결된 챌린지를 풀며 아이디어를 직접 구현해 보세요.
챌린지로 연습하기
이 레슨에서 배운 내용으로 실제 문제를 풀어 보세요. 모든 챌린지는 브라우저에서 실행되며 즉시 테스트와 AI 리뷰를 받을 수 있습니다.
- 소프트맥스 함수 큰 값에서도 오버플로 없이 원시 점수를 합이 1인 확률로 바꿉니다. 쉬움
- 범주형 교차 엔트로피 손실 예측 확률과 정답 클래스로 다중 클래스 분류기의 손실을 측정합니다. 쉬움
- K-최근접 이웃 분류기 가장 가까운 k개 학습 점의 다수결로 레이블을 예측합니다. 보통
- 나이브 베이즈 분류기 베이즈 정리와 라플라스 스무딩으로 범주형 특성에서 클래스를 예측합니다. 보통
- 지니 불순도 그룹 안의 레이블이 얼마나 섞여 있는지 측정합니다. 결정 트리가 분할을 고를 때 쓰는 점수입니다. 쉬움
- 정보 이득 특성으로 분할했을 때 엔트로피가 얼마나 줄어드는지 계산합니다. ID3 결정 트리의 기준입니다. 보통