데이터 분석/데이터 사이언스
데이터 사이언스 - 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 알고리즘 과정
- 새로운 데이터 포인트의 위치를 확인
- 가장 가까운 K개의 데이터를 찾음
- 다수결을 통해 클래스 결정
📌 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 → 최적의 분류 경계를 찾는 모델
이러한 모델을 적절히 활용하면 다양한 분류 문제를 효과적으로 해결할 수 있다.