Python으로 배우는 AI 개념

Python으로 배우는 분류 기초: Softmax와 k-최근접 이웃

분류는 고양이나 개처럼 레이블을 고르는 것입니다. 모델이 클래스마다 점수를 내고 Softmax로 확률로 바꿀 수도 있고, k-최근접 이웃처럼 가장 가까운 기존 예시들이 투표하게 하는 간단한 방법도 있습니다.

쉬운 말로 이해하는 개념

분류는 고양이나 개처럼 레이블을 고르는 것입니다. 모델이 클래스마다 점수를 내고 Softmax로 확률로 바꿀 수도 있고, k-최근접 이웃처럼 가장 가까운 기존 예시들이 투표하게 하는 간단한 방법도 있습니다.

Softmax로 점수를 클래스 확률로 바꾸고, 교차 엔트로피로 평가하며, k-최근접 이웃으로 점을 분류합니다.

핵심 아이디어

  • Softmax는 점수의 순서를 유지하면서 합이 1이 되게 합니다.
  • 범주형 교차 엔트로피는 자신 있게 틀린 답에 가장 큰 벌점을 줍니다.
  • k-NN에는 학습 단계가 없으며, 새 점을 저장된 예시와 비교할 뿐입니다.
  • 나이브 베이즈와 결정 트리(지니 불순도, 정보 이득)도 대표적인 분류기입니다.

언제 사용하나요?

  • 신경망과 AI 라이브러리 내부에서 무슨 일이 일어나는지 이해합니다.
  • 해당 챌린지에서 직접 구현하기 전에 아이디어를 익힙니다.
  • 머신러닝 강의, 면접, 프로젝트를 준비합니다.

직접 움직여 보기

왼쪽 차트의 아무 곳이나 클릭하면 가장 가까운 k개 이웃의 투표로 새 점이 분류됩니다. 오른쪽 점수를 바꾸면 Softmax가 반응합니다.

예제 코드

코드 실행 →
main.py
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 컴파일러에서 실행하세요.

연습 문제

입력값과 경계 조건을 바꾸고 더 큰 데이터에서도 동작을 확인하세요.

  1. 입력이나 가중치를 바꾸고 실행하기 전에 출력을 예상해 보세요.
  2. 중간 값을 출력해 계산의 각 단계를 따라가 보세요.
  3. 아래에 연결된 챌린지를 풀며 아이디어를 직접 구현해 보세요.
Python IDE에서 실행 →

챌린지로 연습하기

이 레슨에서 배운 내용으로 실제 문제를 풀어 보세요. 모든 챌린지는 브라우저에서 실행되며 즉시 테스트와 AI 리뷰를 받을 수 있습니다.

모든 챌린지