728x90
반응형
SMALL
앞서 선형 회귀와 다중 선형 회귀를 통해 숫자(연속값)를 예측하는 회귀 문제를 다루었습니다.
이제부터는 조금 다른 유형의 문제, 즉 분류(Classification) 문제를 해결하는 방법을 알아보겠습니다.
그 출발점이 되는 알고리즘이 바로 로지스틱 회귀(Logistic Regression)입니다.
1️⃣ 로지스틱 회귀란 무엇인가요?
로지스틱 회귀는 이름에 ‘회귀’가 들어가 있지만, 사실은 분류(Classification) 문제를 해결하는 알고리즘입니다.
선형 회귀처럼 연속적인 숫자를 예측하는 것이 아니라, 입력 데이터를 기반으로 특정 범주(클래스)에 속할 확률을 예측합니다.
예를 들어 다음과 같은 이진 분류 문제를 처리할 수 있습니다:
- 이메일이 스팸인지 정상인지 분류
- 어떤 환자가 질병이 있는지 여부 예측
- 사용자가 광고를 클릭할지 여부 판단
이처럼 결과가 0 또는 1로 나뉘는 문제에 적합한 알고리즘입니다.
2️⃣ 로지스틱 회귀의 핵심 개념
✅ 시그모이드 함수 (Sigmoid Function)
로지스틱 회귀의 핵심은 선형 회귀의 결과값을 확률로 변환하는 것입니다.
이때 사용되는 함수가 바로 시그모이드 함수입니다.
σ(z) = 1 / 1+e−z1, where z = WX + b
- 선형 회귀와 같은 구조로 z = WX + bz = WX + b를 계산한 후
- 시그모이드 함수를 통해 이 값을 0과 1 사이의 확률 값으로 변환합니다.
✅ 결정 경계 (Decision Boundary)
예측된 확률이 0.5 이상이면 클래스 1, 0.5 미만이면 클래스 0으로 분류하는 방식입니다.
예시:
- 이메일이 스팸일 확률이 0.8이라면 → “스팸”으로 예측
- 환자가 질병을 가졌을 확률이 0.3이라면 → “비환자”로 예측
✅ 실습: 로지스틱 회귀를 활용한 이진 분류
이제 실제 데이터를 생성하고 로지스틱 회귀 모델을 학습해 보겠습니다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
# 데이터 생성
X, y = make_classification(n_samples=500, n_features=2, n_classes=2, random_state=42)
# 훈련/테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 로지스틱 회귀 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 성능 평가
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
print("Confusion Matrix:")
print(conf_matrix)
print("Classification Report:")
print(classification_report(y_test, y_pred))
🎯 결정 경계 시각화
모델이 어떻게 분류 기준선을 설정했는지 시각적으로 확인해보겠습니다.
# 결정 경계 시각화
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.2)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolor='k')
plt.title("Logistic Regression Decision Boundary")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.grid(True)
plt.show()
해석: 위 그래프에서 경계선을 기준으로 서로 다른 클래스(0 또는 1)가 구분되며, 점의 색깔은 실제 정답을 나타냅니다.
🏆 오늘의 핵심 요약
핵심 | 개념 설명 |
---|---|
✅ 로지스틱 회귀 | 분류 문제를 해결하는 대표적인 지도 학습 알고리즘입니다. |
✅ 시그모이드 함수 | 입력값을 0~1 사이의 확률로 변환하여 클래스 예측을 가능하게 합니다. |
✅ 결정 경계 | 확률 기준(보통 0.5)을 중심으로 데이터를 클래스 0 또는 1로 나눕니다. |
728x90
반응형
LIST
'인공지능 (AI) > 머신러닝 (ML)' 카테고리의 다른 글
7 - 정답 없이 배우는 머신러닝: 비지도 학습과 K-Means 클러스터링 (0) | 2025.04.03 |
---|---|
6 - 숫자부터 문자까지, 분류의 확장: 다중 클래스 분류와 소프트맥스 회귀 (0) | 2025.04.03 |
4 - 회귀 모델 성능, 어떻게 더 좋게 만들 수 있을까? (0) | 2025.04.03 |
3 - 예측을 더 정밀하게: 다중 선형 회귀 (0) | 2025.04.03 |
2 - 숫자로 미래를 그리다: 선형 회귀 (0) | 2025.04.03 |