🔹 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 |