hy30nq's blog

[혼공머신 / 3주차] 다중 분류부터 확률적 경사 하강법까지, 로지스틱 회귀의 모든 것 본문

대외 활동/혼공학습단

[혼공머신 / 3주차] 다중 분류부터 확률적 경사 하강법까지, 로지스틱 회귀의 모든 것

hy30nq 2025. 1. 27. 22:52
728x90

머신러닝을 공부하다 보면 ‘이진 분류(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. 마무리 정리

  1. 다중 분류는 클래스가 2개 이상일 때의 문제이며, 이때 소프트맥스 함수를 통해 각 클래스 확률을 구합니다.
  2. 로지스틱 회귀는 이름과 달리 분류 모델로, 시그모이드(이진) 또는 소프트맥스(다중) 함수를 결합하여 확률을 예측합니다.
  3. scikit-learnLogisticRegressionSGDClassifier를 통해 쉽게 로지스틱 회귀 및 확률적 경사 하강법을 적용할 수 있습니다.
  4. 점진적 학습(온라인 학습)은 데이터를 조금씩 추가해가며 학습해나가는 방식이며, 이때 SGD가 대표적인 방법입니다.
  5. 손실 함수는 예측과 실제 값의 차이를 측정하는 지표이며, 분류에서는 (이진)로지스틱 손실 혹은 (다중)크로스엔트로피, 회귀에서는 MSE 등을 사용합니다.
  6. 조기 종료나 다른 규제 기법을 적절히 사용해 모델의 과대적합을 억제해야 합니다.

10. 과제

문제:
로지스틱 회귀가 이진 분류에서 확률을 출력하기 위해 사용하는 함수는 무엇인가요?

정답:
시그모이드 함수


풀이:

  1. 로지스틱 회귀(Logistic Regression)는 이름과 달리 분류 모델로, 주로 이진 분류(Binary Classification) 문제에 사용됩니다.
  2. 이 모델은 선형 방정식의 결과를 확률로 변환하기 위해 시그모이드 함수(sigmoid function)를 사용합니다.
  3. 시그모이드 함수의 정의:
    [
    \sigma(z) = \frac{1}{1 + e^{-z}}
    ]
    • 이 함수는 입력값 ( z )를 0과 1 사이의 값으로 압축하여 확률값으로 변환합니다.
    • 예를 들어, ( \sigma(z) )가 0.8이라면 해당 샘플이 양성 클래스(1)일 확률이 80%라는 의미입니다.
  4. 소프트맥스 함수다중 분류(Multi-class Classification)에서 사용되며, 모든 클래스에 대한 확률을 계산하고 합이 1이 되도록 정규화합니다. 하지만 이 문제는 이진 분류와 관련 있으므로 답이 아닙니다.
  5. 로그 함수지수 함수는 로지스틱 회귀에서 내부적으로 사용되긴 하지만, 확률 계산 자체를 위해 사용하는 함수는 아닙니다.

결론:
이진 분류에서 확률을 계산하기 위해 사용하는 함수는 시그모이드 함수입니다.

 

 

 

 

 

 

 

이상으로 다중 분류에서의 로지스틱 회귀, 확률적 경사 하강법, 그리고 scikit-learn에서의 주요 매개변수와 구현 방식까지 간략히 살펴보았습니다. 머신러닝 모델을 학습할 때는 문제 유형(이진 분류, 다중 분류, 회귀)에 맞는 손실 함수를 올바르게 골라야 하고, 적절한 에포크와 규제 기법(조기 종료, L1/L2 규제 등)을 통해 과대적합을 방지하는 것이 중요합니다.
더 나아가 대량의 데이터나 실시간 데이터 스트림을 처리해야 하는 상황이라면, 점진적 학습과 확률적 경사 하강법을 고려해보시길 바랍니다.

감사합니다!

728x90