데이터 분석/데이터 사이언스

데이터 사이언스 - 7. 지도 학습 (Supervised Learning) (7.2 분류 모델 (Classification Models))

개발_노트 2025. 3. 20. 16:28

7.2 분류 모델 (Classification Models)

분류(Classification)는 데이터를 특정 카테고리(클래스)로 구분하는 머신러닝 기법이다.
예를 들어, 스팸 메일 분류(스팸/정상), 질병 진단(암/정상), 고객 이탈 예측(이탈/유지) 등의 문제에서 사용된다.

이 장에서는 대표적인 분류 알고리즘(로지스틱 회귀, KNN, 의사결정나무, 랜덤 포레스트, SVM)을 다룬다.


7.2.1 로지스틱 회귀 (Logistic Regression)

1) 로지스틱 회귀란?

  • 선형 회귀와 유사하지만 출력 값이 0과 1(또는 여러 클래스)로 구분되는 분류 모델
  • 이진 분류(Binary Classification) 문제에서 많이 사용됨
  • 예) 이메일이 스팸인지 아닌지 (0: 정상, 1: 스팸)

2) 로지스틱 함수 (시그모이드 함수)

로지스틱 회귀는 선형 회귀의 결과를 0과 1 사이의 확률 값으로 변환하기 위해 시그모이드(Sigmoid) 함수를 사용한다.

시그모이드 함수 공식:

P(y=1 | X) = 1 / (1 + exp(-(wX + b)))
  • wX + b: 선형 회귀에서 사용되는 가중치(weight)와 절편(bias)
  • exp(): 자연상수 e의 거듭제곱

3) 로지스틱 회귀 모델 학습 예제 (Scikit-learn 사용)

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

# 데이터 로드
iris = load_iris()
X, y = iris.data, iris.target

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 로지스틱 회귀 모델 생성 및 학습
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# 예측 및 평가
accuracy = model.score(X_test, y_test)
print("Logistic Regression Accuracy:", accuracy)

로지스틱 회귀 특징

  • 빠르고 간단하며 해석이 쉬운 모델
  • 이진 분류 문제에 효과적
  • 출력이 확률 값이므로 신뢰도를 제공

7.2.2 K-최근접 이웃 (K-Nearest Neighbors, KNN)

1) KNN이란?

  • 새로운 데이터를 예측할 때, 가장 가까운 K개의 데이터를 참고하여 분류
  • 거리(유클리드 거리, 맨해튼 거리 등)를 기준으로 가장 가까운 데이터들의 다수결로 클래스 결정

2) KNN 알고리즘 과정

  1. 새로운 데이터 포인트의 위치를 확인
  2. 가장 가까운 K개의 데이터를 찾음
  3. 다수결을 통해 클래스 결정

📌 KNN 모델 학습 예제

from sklearn.neighbors import KNeighborsClassifier

# KNN 모델 생성 및 학습 (K=3)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# 예측 및 평가
accuracy = knn.score(X_test, y_test)
print("KNN Accuracy:", accuracy)

KNN 특징

  • 비선형 데이터에도 유용
  • 모델 학습이 빠르지만 예측 속도가 느림 (새로운 데이터가 들어오면 매번 거리를 계산해야 함)
  • K 값 조정이 중요 (적절한 K 선택 필요)

7.2.3 의사결정나무 (Decision Tree)

1) 의사결정나무란?

  • 데이터의 특성을 기준으로 가지(branch)를 나누어 분류하는 모델
  • 사람이 의사결정을 내리는 방식과 유사
  • 예) 환자의 증상을 기준으로 질병을 진단하는 트리 구조

📌 의사결정나무 모델 학습 예제

from sklearn.tree import DecisionTreeClassifier

# 의사결정나무 모델 생성 및 학습
tree = DecisionTreeClassifier(max_depth=3, random_state=42)
tree.fit(X_train, y_train)

# 예측 및 평가
accuracy = tree.score(X_test, y_test)
print("Decision Tree Accuracy:", accuracy)

의사결정나무 특징

  • 해석이 쉬움 (트리 구조를 시각화 가능)
  • 비선형 데이터에도 적용 가능
  • 과적합 위험이 있음 → 트리 깊이 조절 필요

7.2.4 랜덤 포레스트 (Random Forest)

1) 랜덤 포레스트란?

  • 여러 개의 의사결정나무를 앙상블(Ensemble)하여 예측 성능을 높이는 방법
  • 각각의 트리가 독립적으로 예측한 후 투표 방식(Majority Voting)으로 최종 결과를 결정

📌 랜덤 포레스트 모델 학습 예제

from sklearn.ensemble import RandomForestClassifier

# 랜덤 포레스트 모델 생성 및 학습 (트리 개수 = 100)
forest = RandomForestClassifier(n_estimators=100, random_state=42)
forest.fit(X_train, y_train)

# 예측 및 평가
accuracy = forest.score(X_test, y_test)
print("Random Forest Accuracy:", accuracy)

랜덤 포레스트 특징

  • 과적합을 방지할 수 있음 (여러 개의 트리를 결합하여 안정적인 성능 제공)
  • 특성 중요도(Feature Importance)를 제공
  • 대규모 데이터에도 효과적

7.2.5 서포트 벡터 머신 (Support Vector Machine, SVM)

1) SVM이란?

  • 데이터를 가장 잘 분리할 수 있는 최적의 경계(결정 경계, Decision Boundary)를 찾는 모델
  • 고차원에서도 효과적으로 작동
  • 선형적으로 분류가 어려운 데이터에는 커널(Kernel) 트릭을 사용

📌 SVM 모델 학습 예제

from sklearn.svm import SVC

# SVM 모델 생성 및 학습
svm = SVC(kernel="linear", C=1.0)
svm.fit(X_train, y_train)

# 예측 및 평가
accuracy = svm.score(X_test, y_test)
print("SVM Accuracy:", accuracy)

SVM 특징

  • 고차원 데이터에도 효과적
  • 선형적으로 분류할 수 없는 데이터에 유용 (비선형 커널 적용 가능)
  • 모델 학습이 느릴 수 있음 (대규모 데이터에서는 계산량 증가)

결론

대표적인 분류 모델

  • 로지스틱 회귀 → 이진 분류 문제
  • KNN → 거리 기반 분류
  • 의사결정나무 → 트리 기반 모델
  • 랜덤 포레스트 → 여러 트리 결합 (앙상블)
  • SVM → 최적의 분류 경계를 찾는 모델

이러한 모델을 적절히 활용하면 다양한 분류 문제를 효과적으로 해결할 수 있다.