본문 바로가기
머신러닝 & 딥러닝

머신러닝 분류 알고리즘 4가지 정리

by 곽정우 2025. 4. 18.

🔹 1. 로지스틱 회귀 (Logistic Regression)

📌 개념

  • 이름에 "회귀"가 있지만, 사실은 분류(Classification) 알고리즘이에요.
  • 결과가 두 가지 중 하나(예: 생존 vs 사망)일 때 적합한 모델이에요.
  • 다중 클래스 분류도 가능하며, 이 경우 소프트맥스(Softmax) 함수를 사용합니다.

🧠 이론

  • 선형 회귀처럼 y = wx + b 형태로 계산한 후, 그 값을 시그모이드 함수에 넣어서 0~1 사이의 확률로 바꿔줘요.
  • 시그모이드 함수:
  • 이 확률이 0.5 이상이면 1(생존), 아니면 0(사망)처럼 분류합니다.

✅ 특징

  • 빠르고 간단함
  • 결과 해석이 쉬움 (확률 기반)
  • 선형적으로 구분 가능한 문제에 적합

🚀 활용 사례

  • 이메일 스팸 분류
  • 의료 진단(질병 유무 판단)
  • 신용 대출 승인 여부 결정

💻 간단한 구현 예시

from sklearn.linear_model import LogisticRegression

# 모델 생성 및 학습
model = LogisticRegression()
model.fit(X_train, y_train)

# 예측하기
y_pred = model.predict(X_test)

🔹 2. 랜덤 포레스트 (Random Forest)

📌 개념

  • 의사결정 나무(Decision Tree)를 여러 개 만들어서 예측을 종합하는 앙상블(ensemble) 기법이에요.
  • 여러 개의 트리를 만들어서 투표로 최종 결과를 결정합니다.

🧠 이론

  • 각 나무는 훈련 데이터 중 일부만 랜덤으로 가져와서 학습합니다 (Bagging).
  • 각 트리는 약간 다른 기준으로 학습되기 때문에, 여러 트리를 합치면 과적합(overfitting)을 줄이고 정확도를 높일 수 있어요.

✅ 특징

  • 복잡한 데이터에서도 잘 작동함
  • 과적합 방지에 강함
  • 트리 수가 많으면 느릴 수 있음
  • 특성 중요도(Feature Importance)를 쉽게 확인 가능

⚙️ 주요 하이퍼파라미터

  • n_estimators: 생성할 트리의 개수
  • max_depth: 트리의 최대 깊이
  • min_samples_split: 노드 분할에 필요한 최소 샘플 수

🚀 활용 사례

  • 금융 사기 탐지
  • 질병 예측
  • 고객 이탈 예측

💻 간단한 구현 예시

from sklearn.ensemble import RandomForestClassifier

# 모델 생성 및 학습
rf_model = RandomForestClassifier(n_estimators=100)
rf_model.fit(X_train, y_train)

# 특성 중요도 확인
feature_importance = rf_model.feature_importances_

🔹 3. 서포트 벡터 머신 (SVM)

📌 개념

  • 데이터 사이의 최적의 경계(Decision Boundary)를 찾아주는 분류기
  • 클래스 간 간격(margin)을 최대로 벌리는 선을 찾아서 분류합니다.

🧠 이론

  • 서포트 벡터란: 결정 경계에 가장 가까운 데이터 포인트들
  • 선형으로 분류가 어려운 경우, 커널 함수(kernel)를 써서 고차원 공간으로 보내고 거기서 선형 분리를 시도해요.

🌟 주요 커널 함수

  • 선형(Linear): 단순한 직선 경계
  • 다항식(Polynomial): 곡선 형태의 경계
  • RBF(Radial Basis Function): 복잡한 비선형 경계
  • 시그모이드(Sigmoid): 신경망과 유사한 결정 경계

✅ 특징

  • 고차원 데이터에 효과적
  • 적은 데이터에도 잘 작동
  • 큰 데이터셋에서는 느릴 수 있음

🚀 활용 사례

  • 얼굴/이미지 인식
  • 텍스트 분류
  • 유전자 분류

💻 간단한 구현 예시

from sklearn.svm import SVC

# 모델 생성 및 학습
svm_model = SVC(kernel='rbf', C=1.0)
svm_model.fit(X_train, y_train)

🔹 4. K-최근접 이웃 (K-Nearest Neighbors, KNN)

📌 개념

  • 새로운 데이터가 주어졌을 때, 가장 가까운 K개의 이웃을 보고, 그 중 가장 많은 분류에 따라 결과를 예측합니다.

🧠 이론

  • 거리(metric)를 기준으로 이웃을 찾음 (보통 유클리드 거리 사용)
  • 예: K=3이면 주변에서 가장 가까운 3명을 보고 다수결로 분류

✅ 특징

  • 훈련은 빠르고 간단 (사실상 저장만 함)
  • 예측할 때 시간이 오래 걸림 (모든 데이터를 비교함)
  • 이상치(outlier)에 민감할 수 있음
  • K값 선택이 중요함

🚀 활용 사례

  • 추천 시스템
  • 이상치 탐지
  • 패턴 인식

💻 간단한 구현 예시

from sklearn.neighbors import KNeighborsClassifier

# 모델 생성 및 학습
knn_model = KNeighborsClassifier(n_neighbors=5)
knn_model.fit(X_train, y_train)

📊 알고리즘 비교표

알고리즘 주요 개념 장점 단점 적합한 데이터

로지스틱 회귀 확률 기반 이진 분류 간단, 빠름, 해석 쉬움 선형 데이터만 잘 됨 선형 관계, 중간 크기
랜덤 포레스트 다수 트리의 앙상블 정확도 높음, 과적합 방지 느릴 수 있음, 해석 어려움 복잡한 비선형 데이터
SVM 경계 마진 최대화 적은 데이터에 강함 느림, 커널 선택 어려움 고차원, 명확한 구분
KNN 가장 가까운 이웃 다수결 개념 단순, 직관적 느림, 고차원에 부적합 작은 데이터셋, 명확한 군집

📈 모델 평가 방법

분류 모델의 성능을 평가하는 주요 지표들:

  • 정확도(Accuracy): 전체 예측 중 맞은 비율
  • 정밀도(Precision): 양성으로 예측한 것 중 실제 양성인 비율
  • 재현율(Recall): 실제 양성 중 양성으로 예측한 비율
  • F1 점수: 정밀도와 재현율의 조화평균
  • ROC 곡선과 AUC: 다양한 임계값에서 모델 성능을 시각화
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 모델 평가
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print(f"정확도: {accuracy:.4f}, 정밀도: {precision:.4f}")
print(f"재현율: {recall:.4f}, F1 점수: {f1:.4f}")

 

'머신러닝 & 딥러닝' 카테고리의 다른 글

22. 포켓몬 분류  (2) 2024.06.17
21. 전이 학습  (0) 2024.06.17
20. 간단한 CNN 모델 만들기  (0) 2024.06.17
19. CNN 기초  (0) 2024.06.13
18. 비선형 활성화 함수  (0) 2024.06.13