티스토리 뷰

반응형

머신러닝 기초학습 2: 대표 ML 알고리즘—학습과 추론의 ‘방식’까지 이해하기

이 글은 “용어 나열”이 아니라, 각 모델이 ‘무엇을 최적화’하고 ‘어떻게 일반화’하며 ‘추론 시 무슨 계산’을 하는지까지 파고듭니다. 손에 잡히는 짧은 실행 코드도 함께 넣었습니다(로컬에서 scikit-learn만 있으면 바로 실행됩니다).


0. 큰 지형 보기: 공통 수식과 관점

대부분의 지도학습은 아래 꼴로 요약됩니다.

[
\theta^* ;=; \arg\min_\theta \frac{1}{N}\sum_{i=1}^N L\big(y_i,; f(x_i; \theta)\big);+;\lambda,\Omega(\theta)
]

  • (L): 손실함수(예측과 정답의 차이)
  • (\Omega): 정규화(복잡도 패널티, 과적합 방지)
  • (\lambda): 정규화 강도
  • 학습: (\theta) 찾기(보통 경사하강)
  • 추론: 학습된 (\theta)로 (f(x)) 계산

비지도학습은 라벨 없이 분포 구조나 잠재변수를 찾습니다. 대표적으로 K-Means(거리 최소화), PCA(분산 최대/재구성 오차 최소), GMM(가능도 최대/EM) 등이 있습니다.


1. 선형회귀 (Linear Regression)

  • 목표: 연속값 예측
  • 학습: 최소제곱(OLS)로 평균제곱오차(MSE) 최소화
    [
    \min_\theta \sum_i \big(y_i - \theta^\top x_i\big)^2
    ]
    해석 가능한 해 ((X^\top X)^{-1}X^\top y) 또는 경사하강. Ridge/Lasso로 규제 추가.
  • 추론: ( \hat{y}= \theta^\top x)

언제 좋은가: 선형성이 강하고 해석 가능성이 중요한 문제, 피처 수 대비 데이터가 충분할 때.


2. 로지스틱 회귀 (Logistic Regression)

반응형
  • 목표: 이진/다중 분류에서 확률 추정
  • 모형: (p(y=1|x)=\sigma(\theta^\top x)), (\sigma)는 sigmoid
  • 학습: 로지스틱 우도 최대화 ↔ 교차엔트로피 최소화
    [
    \min_\theta -\sum_i \Big[ y_i\log \hat{p}_i + (1-y_i)\log(1-\hat{p}_i)\Big] + \lambda|\theta|^2
    ]
  • 추론: (\hat{p}=\sigma(\theta^\top x)), 임계값 0.5 등으로 레이블 결정

강점: 확률적 해석, 빠른 학습, 피처 중요도 계수로 해석 용이.


3. k-최근접 이웃 (k-NN)

  • 목표: 레이블 또는 값의 국소 평균/다수결
  • 학습: 없음(게으른 학습) —데이터 저장이 전부
  • 추론: 쿼리 (x)와 훈련 샘플 간 거리 계산 → 가장 가까운 k개의 다수결/평균
  • 핵심 하이퍼파라미터: (k), 거리(metric), 가중(가까울수록 더 크게)

장단: 구조 가정이 없어 직관적이나, 고차원에서 거리 의미 약화, 예측 시 느림.


4. 나이브 베이즈 (Naive Bayes)

  • 목표: 조건부 확률 모델로 빠르고 견고한 분류
  • 가정: 클래스 (y) 하에서 피처 독립
    [
    p(x|y)=\prod_j p(x_j|y)
    ]
  • 학습: (p(y))와 각 (p(x_j|y))의 통계량 추정(가우시안/멀티노미얼 등)
  • 추론: 베이즈 규칙으로 (p(y|x) \propto p(y)\prod_j p(x_j|y))

특징: 독립 가정이 강하지만 데이터 적을 때 의외로 강력, 매우 빠름.


5. 결정트리 & 앙상블 (Random Forest, Gradient Boosting)

5.1 결정트리 (Decision Tree)

  • 학습: 재귀적 분할. 분할 기준은 지니, 엔트로피(분류)/MSE(회귀) 감소 최대
  • 추론: 루트→리프 경로를 따라가 리프 값/다수결 반환
  • 장점: 비선형/상호작용 자동 포착, 해석 쉬움
  • 약점: 단독 트리는 과적합 쉬움 → 가지치기/최대깊이 제한 필요

5.2 랜덤 포레스트 (Random Forest)

  • 학습: 부트스트랩 샘플링 + 피처 서브샘플링으로 많은 트리 학습 → 평균/다수결
  • 효과: 분산 감소(안정성↑), 과적합 완화, 피처 중요도 제공

5.3 그라디언트 부스팅 (XGBoost/LightGBM 포함)

  • 아이디어: 현재 예측 오차(손실의 음의 그래디언트)를 새 트리로 순차 보정
  • 학습: 약한 학습기(얕은 트리)를 단계적으로 추가, 학습률(learning rate)로 제어
  • 특징: 탁월한 성능/랭킹, 섬세한 정규화, 결측/카테고리 처리(라이브러리별)

6. SVM (Support Vector Machine)

  • 목표: 마진 최대화 초평면으로 분류
  • 학습(선형 SVM):
    [
    \min_{w,b}\frac{1}{2}|w|^2 + C\sum_i \max\big(0, 1-y_i(w^\top x_i + b)\big)
    ]
    힌지 손실 + 정규화 → 소프트마진으로 이상치 견고
  • 커널 트릭: (\phi(x)) 고차원 매핑을 커널 (K(x,x')) 로 암시적으로 계산(RBF, Poly 등)
  • 추론: 서포트 벡터와의 커널 합으로 부호/점수 판단

장점: 고차원/작은 데이터에 강함. 단점: 대용량 데이터엔 비용↑, 확률 출력 직접 없음(Platt scaling 등 필요).


7. K-Means (비지도)

  • 목표: 클러스터 중심 ({\mu_k})와 할당 (z_i)로 제곱거리 합 최소화
    [
    \min_{{\mu_k},{z_i}} \sum_i |x_i - \mu_{z_i}|^2
    ]
  • 학습(반복): (E) 각 점을 가장 가까운 중심에 할당 → (M) 각 클러스터 평균으로 중심 갱신
  • 추론: 새 점을 가장 가까운 중심에 할당

주의: (K) 선택 필요(엘보/실루엣), 구형/균등 분포 가정에 강함.


8. PCA (비지도 차원축소)

  • 목표: 분산 최대 방향(고유벡터) 찾기 ↔ 재구성 오차 최소
  • 학습: 공분산 행렬 고유분해(또는 SVD)로 주성분 획득
  • 추론(투영): (z = W^\top(x-\bar{x})) (저차 잠재공간)

효과: 잡음 제거, 시각화, 선형 상관 구조 파악. (비선형은 커널PCA/오토인코더 고려)


9. 가우시안 혼합모형 GMM (비지도, 확률 모형)

  • 목표: 데이터가 여러 개의 가우시안 혼합에서 왔다고 가정
    [
    p(x)=\sum_{k=1}^K \pi_k \mathcal{N}(x|\mu_k,\Sigma_k)
    ]
  • 학습(EM):
    • E-step: 각 점의 클러스터 책임도(posterior) 계산
    • M-step: 책임도로 가중된 평균/공분산/혼합비 갱신
  • 추론: (\arg\max_k, p(z=k|x))로 소속/확률 추정

장점: 타원형 클러스터/불확실성 모델링. 주의: (K) 선택(BIC/AIC), 수렴 품질 초기값 의존.


10. 다층 퍼셉트론(MLP) & 딥러닝

  • 구성: 선형변환 + 비선형 활성화(ReLU/SiLU 등) 레이어를 깊게 쌓음
  • 학습: 역전파(Backprop) 로 각 레이어 가중치의 그래디언트 계산 → 옵티마이저(SGD/Adam)로 갱신
  • 손실: 회귀(MSE), 분류(크로스엔트로피)
  • 추론: 순전파로 로짓/확률 계산 → 레이블 결정
  • 강점: 표현 학습(피처 공학 자동화), 대규모 데이터에서 강력
  • 주의: 하이퍼파라미터, 정규화(드롭아웃/정규화층/가중감쇠), 데이터/연산 비용

11. 바이어스–분산, 정규화, 모델 선택

  • 바이어스: 단순한 가정의 체계적 오차
  • 분산: 데이터 샘플 변화에 대한 민감도
  • 정규화/규제: L2(L2 norm), L1(희소성), 조기종료, 드롭아웃, 앙상블
  • 검증: K-Fold CV, 홀드아웃, 시계열 CV
  • 선택: 문제 성격(선형/비선형/해석/속도/데이터 크기)에 맞추기

12. 한 번에 돌려보는 미니 실험 코드 (검증 완료)

아래 코드는 분류/회귀/비지도를 한 번에 확인합니다.
(의존성: pip install scikit-learn matplotlib — 그래프는 옵션)

# 실행 환경: Python 3.9+ / scikit-learn >= 1.2
# 기능: 분류(로지스틱, SVM, RF, kNN, NB), 회귀(선형), 비지도(KMeans, PCA, GMM)
from sklearn.datasets import make_classification, make_regression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression, LinearRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, r2_score, adjusted_rand_score
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.mixture import GaussianMixture
import numpy as np
import warnings
warnings.filterwarnings("ignore")

# 1) 분류용 데이터
Xc, yc = make_classification(n_samples=1200, n_features=10, n_informative=5,
                             n_redundant=2, n_clusters_per_class=2,
                             flip_y=0.03, class_sep=1.2, random_state=42)
Xc_tr, Xc_te, yc_tr, yc_te = train_test_split(Xc, yc, test_size=0.25, random_state=42)

# 2) 회귀용 데이터
Xr, yr = make_regression(n_samples=1000, n_features=8, noise=10.0, random_state=42)
Xr_tr, Xr_te, yr_tr, yr_te = train_test_split(Xr, yr, test_size=0.25, random_state=42)

# --- 지도학습(분류) ---
models_cls = {
    "Logistic": make_pipeline(StandardScaler(), LogisticRegression(max_iter=200)),
    "SVM-RBF": make_pipeline(StandardScaler(), SVC(kernel="rbf", probability=False)),
    "RandomForest": RandomForestClassifier(n_estimators=200, random_state=42),
    "kNN(k=7)": make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=7)),
    "NaiveBayes": GaussianNB(),
}

print("== Classification ==")
for name, clf in models_cls.items():
    clf.fit(Xc_tr, yc_tr)
    pred = clf.predict(Xc_te)
    acc = accuracy_score(yc_te, pred)
    print(f"{name:12s} | accuracy = {acc:.3f}")

# --- 지도학습(회귀) ---
reg = LinearRegression()
reg.fit(Xr_tr, yr_tr)
r2 = r2_score(yr_te, reg.predict(Xr_te))
print("\n== Regression ==")
print(f"LinearRegression | R2 = {r2:.3f}")

# --- 비지도(KMeans, PCA, GMM) ---
print("\n== Unsupervised ==")
kmeans = KMeans(n_clusters=2, n_init=10, random_state=42)
kmeans.fit(Xc_tr)
cluster_pred = kmeans.predict(Xc_te)
ari = adjusted_rand_score(yc_te, cluster_pred)  # 라벨 불일치 문제 보정 지표
print(f"KMeans           | Adjusted Rand Index = {ari:.3f}")

pca = PCA(n_components=0.95, random_state=42)  # 95% 분산 유지
pca.fit(Xc)
print(f"PCA              | n_components = {pca.n_components_}, "
      f"explained_var(%) ~ {pca.explained_variance_ratio_.sum()*100:.1f}")

gmm = GaussianMixture(n_components=2, covariance_type="full", random_state=42)
gmm.fit(Xc_tr)
bic = gmm.bic(Xc_te)
print(f"GMM              | BIC = {bic:.1f}")

# (선택) 새 샘플 하나에 대한 추론 예시
x_new = Xc_te[0:1]
log_proba = models_cls["Logistic"].predict_proba(x_new)[0]
svm_label = models_cls["SVM-RBF"].predict(x_new)[0]
rf_label = models_cls["RandomForest"].predict(x_new)[0]
print("\n== Single-sample inference ==")
print(f"Logistic p(y=1|x_new) ≈ {log_proba[1]:.3f}  | SVM label = {svm_label} | RF label = {rf_label}")

무엇을 확인할 수 있나

  • 서로 다른 학습 방식: 확률(로지스틱), 마진(SVM), 다수결/평균(kNN), 배깅(RF)
  • 비지도 지표: ARI(KMeans), BIC(GMM), 분산 보존율(PCA)
  • 단일 샘플 추론: 확률/결정함수/다수결이 서로 다른 관점임을 체감

13. 어떤 문제에 어떤 모델?

  • 선형/해석/속도: 로지스틱, 선형회귀
  • 작은 데이터·고차원: 선형SVM/커널SVM
  • 비선형·강한 성능: 랜덤포레스트, 그라디언트부스팅(XGBoost/LightGBM)
  • 규모 작은 실험/빠른 베이스라인: 나이브 베이즈, k-NN
  • 분포/잠재구조 파악: K-Means, PCA, GMM
  • 대규모·표현학습: MLP/딥러닝

14. 마무리—모델은 ‘관점’이다

같은 데이터를 보고도 모델마다 무엇을 중요하게 보는가가 다릅니다.

  • 로지스틱: 우도/확률을 정합시키려는 관점
  • SVM: 결정경계와 마진을 넓히려는 관점
  • 트리/앙상블: 규칙과 평균화로 분산을 줄이는 관점
  • 비지도: 거리/분산/가능도로 구조를 밝히는 관점

다음 글에서는 일반화 성능을 좌우하는 검증/정규화/피처공학/파이프라인화를 실전 관점에서 정리하겠습니다.


참고 자료(출처)

  • Bishop, Pattern Recognition and Machine Learning, Springer.
  • Hastie, Tibshirani, Friedman, The Elements of Statistical Learning, Springer.
  • Murphy, Machine Learning: A Probabilistic Perspective, MIT Press.
  • scikit-learn User Guide (Classification, Regression, Clustering, Decomposition, Mixture).


머신러닝,ML알고리즘,지도학습,비지도학습,로지스틱회귀,SVM,랜덤포레스트,그라디언트부스팅,PCA,가우시안혼합모형

원하면, **“모델 선택과 튜닝(교차검증·정규화·특성공학·파이프라인)”**을 바로 다음 편으로 이어가겠습니다.

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
반응형