728x90
반응형
SMALL
앞서 우리는 로지스틱 회귀(Logistic Regression)를 이용해 두 개의 클래스를 구분하는 이진 분류(Binary Classification) 문제를 해결해 보았습니다.
이번 글에서는 그보다 한 단계 확장된 문제인 다중 클래스 분류(Multiclass Classification)와 이를 해결하기 위한 대표적인 방법인 소프트맥스 회귀(Softmax Regression)에 대해 알아보겠습니다.
1️⃣ 다중 클래스 분류란 무엇인가요?
다중 클래스 분류는 세 개 이상의 클래스 중 하나를 예측하는 문제를 말합니다.
이진 분류가 "A냐, B냐"를 판단하는 문제라면, 다중 클래스 분류는 "A, B, C 중 무엇인가?"를 묻는 문제라고 할 수 있습니다.
📌 예시
- 손글씨 숫자 분류 (0~9)
- 영어 알파벳 인식 (A~Z)
- 제품 품질 등급 분류 (낮음, 보통, 높음)
- 질병 유형 진단 (정상, 경증, 중증)
2️⃣ 소프트맥스 회귀(Softmax Regression)
다중 클래스 분류에서 가장 널리 사용되는 방식 중 하나는 소프트맥스 회귀입니다.
이는 로지스틱 회귀의 확장 형태로, 각 클래스에 속할 확률 값을 출력하고 가장 높은 확률을 가진 클래스를 최종 예측값으로 선택합니다.
✅ 소프트맥스 함수 정의
✅ 결정 방식
✅ 실습: 손글씨 숫자 분류 (MNIST)
이제 실제 데이터셋을 이용해 0~9까지의 숫자를 분류하는 다중 클래스 분류 모델을 구현해보겠습니다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
import seaborn as sns
# 데이터 로드
digits = load_digits()
X = digits.images.reshape(len(digits.images), -1) # 8x8 이미지를 1차원 벡터로 변환
y = digits.target # 정답(0~9)
# 학습/테스트 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 소프트맥스 회귀 모델 학습
model = LogisticRegression(max_iter=1000, multi_class="multinomial", solver="lbfgs")
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
print("Classification Report:")
print(classification_report(y_test, y_pred))
🖼️ 예측 결과 시각화
# 예측 이미지 시각화
fig, axes = plt.subplots(1, 5, figsize=(10, 3))
for i, ax in enumerate(axes):
ax.imshow(X_test[i].reshape(8, 8), cmap="gray")
ax.set_title(f"Pred: {y_pred[i]}")
ax.axis("off")
plt.show()
설명: 위 코드는 테스트 데이터 중 일부 손글씨 이미지를 시각화하고, 예측된 숫자를 함께 표시합니다.
🏆 오늘의 핵심 요약
항목 | 요약 |
✅ 다중 클래스 분류 | 3개 이상의 클래스 중 하나를 예측하는 문제입니다. |
✅ 소프트맥스 회귀 | 각 클래스에 속할 확률을 계산하고, 가장 높은 확률의 클래스를 선택합니다. |
✅ MNIST 실습 | 손글씨 숫자(0~9)를 분류하는 대표적인 예제입니다. |
728x90
반응형
LIST
'인공지능 (AI) > 머신러닝 (ML)' 카테고리의 다른 글
8 -한층 더 정교한 군집화: 계층적 군집과 DBSCAN (0) | 2025.04.03 |
---|---|
7 - 정답 없이 배우는 머신러닝: 비지도 학습과 K-Means 클러스터링 (0) | 2025.04.03 |
5 - 분류의 시작: 로지스틱 회귀와 시그모이드 함수 (0) | 2025.04.03 |
4 - 회귀 모델 성능, 어떻게 더 좋게 만들 수 있을까? (0) | 2025.04.03 |
3 - 예측을 더 정밀하게: 다중 선형 회귀 (0) | 2025.04.03 |