hy30nq's blog
[혼공머신 / 3주차] 다중 분류부터 확률적 경사 하강법까지, 로지스틱 회귀의 모든 것 본문
머신러닝을 공부하다 보면 ‘이진 분류(0 또는 1)’ 말고도 다양한 클래스를 구별해야 하는 다중 분류 문제에 직면하게 됩니다. 이때 흔히 사용하는 모델 중 하나가 ‘이름만 회귀’일 뿐 사실상 분류 알고리즘에 속하는 로지스틱 회귀입니다. 이번 글에서는 로지스틱 회귀를 중심으로 다중 분류와 확률적 경사 하강법(SGD), 그리고 scikit-learn에서의 구현 방법 등을 정리해보겠습니다.
1. 다중 분류(Multi-class Classification)
일반적인 이진 분류 문제는 타깃 값이 0과 1(또는 -1과 1)로 이루어지지만, 다중 분류는 2개 이상의 클래스를 맞춰야 합니다. 예를 들어, MNIST 숫자 데이터(0~9)처럼 10개의 카테고리가 있는 경우 등입니다.
2. 로지스틱 회귀(Logistic Regression)
2.1 로지스틱 회귀란?
- 로지스틱 회귀는 선형 모델(선형 방정식)을 사용한다는 점에서 선형 회귀와 유사해 보이지만, 시그모이드 함수 혹은 소프트맥스 함수와 결합하여 분류에 활용한다는 점이 핵심입니다.
- 결과적으로 0 또는 1(이진 분류), 혹은 여러 클래스(다중 분류)에 속할 확률을 출력합니다.
2.2 시그모이드 함수(Sigmoid Function)
[
\sigma(z) = \frac{1}{1 + e^{-z}}
]
- 입력값 (z) (선형 방정식의 결과)를 0과 1 사이로 압축해주는 역할을 합니다.
- 보통 이진 분류에서 활용하며, 양성 클래스(1)일 확률값을 얻습니다.
2.3 소프트맥스 함수(Softmax Function)
[
\text{Softmax}(\mathbf{z})i = \frac{e^{z_i}}{\sum{j=1}^{K} e^{z_j}}
]
- 여러 개의 선형 방정식 출력을 0~1 사이의 값으로 압축하고, 각 클래스별 확률의 합이 1이 되도록 만들어줍니다.
- 다중 분류에서 사용하며, 가장 큰 확률을 갖는 클래스를 예측 결과로 합니다.
- 지수 함수를 통해 정규화하는 방식이기 때문에 ‘정규화된 지수 함수’라고도 불립니다.
3. scikit-learn으로 로지스틱 회귀 구현하기
3.1 LogisticRegression
주요 매개변수
- solver: 최적화 알고리즘 선택 (기본값
lbfgs
). 대규모 데이터일 경우sag
(확률적 평균 경사 하강법)나saga
사용. - penalty: 규제(Regularization) 방식 선택. L2(릿지) 또는 L1(라쏘) 가능, 기본값은
l2
. - C: 규제 강도. 값이 작을수록 규제가 강해지며, 값이 클수록 규제가 약해집니다.
- predict_proba(): 각 클래스(이진이면 0, 1)에 대한 예측 확률을 반환.
- decision_function(): 모델이 학습한 선형 방정식의 출력(로지스틱 회귀에서는 로짓(logit) 값). 이 값이 큰 클래스를 예측 클래스로 결정.
4. 점진적 학습(온라인 학습)과 확률적 경사 하강법(SGD)
4.1 점진적 학습(Online Learning)
- 한 번에 모든 데이터를 사용하는 것이 아니라, 새로운 데이터가 들어올 때마다 기존 모델을 조금씩 업데이트합니다.
- 대규모 데이터를 다룰 때 유리합니다.
4.2 확률적 경사 하강법(SGD, Stochastic Gradient Descent)
- 전체 훈련 세트에서 하나의 샘플을 꺼내 그에 대한 경사(gradient)를 계산하고, 이를 이용해 가중치를 업데이트합니다.
- 샘플 하나씩이 아니라 여러 샘플(미니배치)을 사용하면 미니배치 경사 하강법, 한 번에 전체 데이터를 이용하면 배치 경사 하강법이라고 합니다.
4.3 에포크(Epoch)
- 전체 훈련 세트를 한 번 모두 사용하는 과정을 1에포크라고 합니다.
- 예를 들어 훈련 세트가 100개라면, 이 100개를 모두 한 번씩 SGD에 통과시켰을 때가 1에포크가 됩니다.
5. 손실 함수(Loss Function)와 비용 함수(Cost Function)
5.1 손실 함수
- 모델이 얼마나 틀렸는지를 한 샘플에 대해 측정하는 지표.
- 미분 가능해야 경사 하강법을 사용할 수 있습니다.
5.2 비용 함수
- 훈련 세트 내 모든 샘플에 대한 손실 함수를 합산(또는 평균)한 것.
5.3 로지스틱 손실(이진 크로스엔트로피, Logistic Loss)
- 이진 분류에서 사용. 타깃이 양성(1)이면 (-\log(\hat{p})), 음성(0)이면 (-\log(1 - \hat{p}))를 사용.
- 예측 확률 (\hat{p})가 1에서 멀어질수록(또는 0에서 멀어질수록) 손실은 극단적으로 커집니다.
5.4 크로스엔트로피 손실(Cross-entropy Loss)
- 다중 분류에서 사용. 여러 클래스 각각의 예측 확률과 실제 타깃의 관계를 종합해 손실값을 계산합니다.
5.5 평균 제곱 오차(MSE, Mean Squared Error)
- 회귀 문제에서 주로 사용. 타깃과 예측의 오차를 제곱하여 평균을 낸 값입니다.
6. 조기 종료(Early Stopping)
- 훈련 에포크를 계속 늘리면 과대적합(overfitting)이 발생하기 쉽습니다.
- 일정 시점부터 검증 데이터 성능이 악화된다면 그 시점에서 훈련을 멈추는 방법을 조기 종료라고 합니다.
7. scikit-learn의 SGDClassifier/SGDRegressor
7.1 SGDClassifier
- 확률적 경사 하강법을 이용한 분류 모델.
- loss: 기본값
hinge
(서포트 벡터 머신을 위한 손실). 로지스틱 회귀로 사용하려면log
로 지정. - penalty: 규제의 종류, 기본값
l2
. - alpha: 규제 강도, 기본값 0.0001.
- max_iter: 에포크 횟수(기본값 1000).
- tol: 손실이 감소하지 않으면 반복을 중단하는 기준(기본값 0.001).
(\rightarrow)n_iter_no_change
에포크 동안 손실이 줄어들지 않으면 학습을 중단.
7.2 SGDRegressor
- 확률적 경사 하강법을 이용한 회귀 모델.
- loss: 기본값은 제곱 오차(
squared_loss
).
8. 그 외: 선형 모델 구현 시 주의사항
- 보통 확률적 경사 하강법을 쓰려면 데이터 전처리(스케일링, 표준화)가 중요합니다.
- 하지만 scikit-learn의 일부 클래스(예:
LinearRegression
)는 내부적으로 정규 방정식을 사용해 해석적 해를 구하거나 적절한 방식을 적용하기 때문에 전처리가 덜 까다로운 경우도 있습니다.
9. 마무리 정리
- 다중 분류는 클래스가 2개 이상일 때의 문제이며, 이때 소프트맥스 함수를 통해 각 클래스 확률을 구합니다.
- 로지스틱 회귀는 이름과 달리 분류 모델로, 시그모이드(이진) 또는 소프트맥스(다중) 함수를 결합하여 확률을 예측합니다.
- scikit-learn의
LogisticRegression
과SGDClassifier
를 통해 쉽게 로지스틱 회귀 및 확률적 경사 하강법을 적용할 수 있습니다. - 점진적 학습(온라인 학습)은 데이터를 조금씩 추가해가며 학습해나가는 방식이며, 이때 SGD가 대표적인 방법입니다.
- 손실 함수는 예측과 실제 값의 차이를 측정하는 지표이며, 분류에서는 (이진)로지스틱 손실 혹은 (다중)크로스엔트로피, 회귀에서는 MSE 등을 사용합니다.
- 조기 종료나 다른 규제 기법을 적절히 사용해 모델의 과대적합을 억제해야 합니다.
10. 과제
문제:
로지스틱 회귀가 이진 분류에서 확률을 출력하기 위해 사용하는 함수는 무엇인가요?
정답:
① 시그모이드 함수
풀이:
- 로지스틱 회귀(Logistic Regression)는 이름과 달리 분류 모델로, 주로 이진 분류(Binary Classification) 문제에 사용됩니다.
- 이 모델은 선형 방정식의 결과를 확률로 변환하기 위해 시그모이드 함수(sigmoid function)를 사용합니다.
- 시그모이드 함수의 정의:
[
\sigma(z) = \frac{1}{1 + e^{-z}}
]- 이 함수는 입력값 ( z )를 0과 1 사이의 값으로 압축하여 확률값으로 변환합니다.
- 예를 들어, ( \sigma(z) )가 0.8이라면 해당 샘플이 양성 클래스(1)일 확률이 80%라는 의미입니다.
- 소프트맥스 함수는 다중 분류(Multi-class Classification)에서 사용되며, 모든 클래스에 대한 확률을 계산하고 합이 1이 되도록 정규화합니다. 하지만 이 문제는 이진 분류와 관련 있으므로 답이 아닙니다.
- 로그 함수와 지수 함수는 로지스틱 회귀에서 내부적으로 사용되긴 하지만, 확률 계산 자체를 위해 사용하는 함수는 아닙니다.
결론:
이진 분류에서 확률을 계산하기 위해 사용하는 함수는 시그모이드 함수입니다.
이상으로 다중 분류에서의 로지스틱 회귀, 확률적 경사 하강법, 그리고 scikit-learn에서의 주요 매개변수와 구현 방식까지 간략히 살펴보았습니다. 머신러닝 모델을 학습할 때는 문제 유형(이진 분류, 다중 분류, 회귀)에 맞는 손실 함수를 올바르게 골라야 하고, 적절한 에포크와 규제 기법(조기 종료, L1/L2 규제 등)을 통해 과대적합을 방지하는 것이 중요합니다.
더 나아가 대량의 데이터나 실시간 데이터 스트림을 처리해야 하는 상황이라면, 점진적 학습과 확률적 경사 하강법을 고려해보시길 바랍니다.
감사합니다!
'대외 활동 > 혼공학습단' 카테고리의 다른 글
[혼공머신 / 2주차] 머신러닝 회귀 알고리즘 완벽 가이드: K-최근접 이웃부터 선형 회귀, 릿지와 라쏘까지 (0) | 2025.01.19 |
---|---|
[혼공머신 / 1주차] 인공지능부터 k-최근접 이웃(KNN)까지, 머신러닝 핵심 개념 총정리 (2) | 2025.01.09 |
[혼공네트] 5주차_정리 (0) | 2024.08.10 |
[혼공네트] 4주차_정리 (0) | 2024.07.25 |
[혼공네트] 3주차_정리 (0) | 2024.07.19 |