4-2. 신경망 기초: 로지스틱 회귀
1. 로지스틱 회귀의 이해
로지스틱 회귀(Logistic Regression)는 지도 학습(Supervised Learning)의 한 종류로, 특히 이진 분류(Binary Classification) 문제에 널리 사용되는 알고리즘입니다. 이진 분류란, 주어진 입력에 대해 두 가지 가능한 범주 중 하나를 예측하는 문제입니다. 예를 들어, 이메일이 스팸인지 아닌지, 종양이 악성인지 양성인지, 신용카드 거래가 사기인지 아닌지를 판단하는 문제 등이 있습니다.
선형 회귀(Linear Regression)가 연속적인 값을 예측하는 데 사용되는 것과 달리, 로지스틱 회귀는 0과 1 사이의 확률 값을 출력하여 분류 문제에 특화되어 있습니다. 이 확률 값을 기준으로 임계치(threshold)를 설정하여, 그 이상이면 1로, 미만이면 0으로 최종적인 분류를 수행합니다.
1) 선형 회귀의 한계
선형 회귀를 분류 문제에 직접 적용하는 것은 몇 가지 문제점을 야기할 수 있습니다. 선형 회귀는 입력 변수와 출력 변수 간의 선형 관계를 가정하기 때문에, 예측 값이 0과 1 범위를 벗어날 수 있습니다. 예를 들어, 스팸 메일 분류 문제에서 선형 회귀 모델이 1.2 또는 -0.3과 같은 값을 출력할 수 있는데, 이는 확률로 해석하기 어렵습니다. 또한, 선형 회귀는 이상치(outlier)에 민감하여 모델의 성능을 저하시킬 수 있습니다.
2) 로지스틱 회귀의 등장 배경
이러한 선형 회귀의 한계를 극복하기 위해 로지스틱 회귀가 등장했습니다. 로지스틱 회귀는 선형 회귀의 출력 값을 시그모이드(Sigmoid) 함수를 통과시켜 0과 1 사이의 값으로 변환합니다. 이를 통해 확률 값을 얻을 수 있고, 분류 문제에 적합하게 사용할 수 있습니다.
2. 시그모이드 함수와 로지스틱 함수
로지스틱 회귀의 핵심은 시그모이드 함수입니다. 시그모이드 함수는 입력 값을 0과 1 사이의 값으로 매핑하는 S자 형태의 함수입니다. 수식으로는 다음과 같이 표현됩니다.
$$ \sigma(z) = \frac{1}{1 + e^{-z}} $$
여기서 $z$는 선형 회귀의 출력값, $e$는 자연상수(약 2.718)입니다.

위 그림에서 볼 수 있듯이, 입력 값 $z$가 커질수록 출력 값은 1에 가까워지고, $z$가 작아질수록 출력 값은 0에 가까워집니다. 이는 로지스틱 회귀가 확률 값을 출력하는 데 핵심적인 역할을 합니다.
1) 로지스틱 함수와의 관계
시그모이드 함수는 로지스틱 함수의 특별한 경우입니다. 로지스틱 함수는 다음과 같은 형태를 가집니다.
$$ f(x) = \frac{L}{1 + e^{-k(x - x_0)}} $$
여기서 $L$은 함수의 최대값(또는 하한값), $k$는 곡선의 기울기, $x_0$는 함수의 중심점입니다. 로지스틱 함수에서 $L=1$, $k=1$, $x_0=0$일 때 시그모이드 함수와 동일해집니다.
로지스틱 회귀에서는 선형 모델의 출력 값을 시그모이드 함수에 넣어 0과 1 사이의 확률 값으로 변환합니다. 즉,
$$ \hat{y} = \sigma(w^T x + b) = \frac{1}{1 + e^{-(w^T x + b)}} $$
여기서 $\hat{y}$는 예측된 확률, $w$는 가중치 벡터, $x$는 입력 특징 벡터, $b$는 편향(bias)입니다. $w^T x + b$는 선형 회귀의 출력값에 해당하며, 시그모이드 함수를 통해 확률 값으로 변환됩니다.
3. 로지스틱 회귀 모델의 학습
로지스틱 회귀 모델의 학습은 가중치 $w$와 편향 $b$를 찾는 과정입니다. 이를 위해 손실 함수(loss function)를 정의하고, 경사 하강법(Gradient Descent)과 같은 최적화 알고리즘을 사용하여 손실을 최소화합니다.
1) 손실 함수: 교차 엔트로피
로지스틱 회귀에서 주로 사용되는 손실 함수는 교차 엔트로피(Cross-Entropy)입니다. 교차 엔트로피는 모델의 예측값과 실제값 간의 차이를 측정하는 데 사용되며, 분류 문제에 적합한 손실 함수입니다.
교차 엔트로피 손실 함수는 다음과 같이 정의됩니다.
$$ L(y, \hat{y}) = -[y \log(\hat{y}) + (1 - y) \log(1 - \hat{y})] $$
여기서 $y$는 실제 레이블(0 또는 1), $\hat{y}$는 모델의 예측 확률입니다.
- 실제 레이블 $y$가 1일 경우, 손실은 $-\log(\hat{y})$가 됩니다. 즉, 예측 확률 $\hat{y}$가 1에 가까울수록 손실은 작아지고, 0에 가까울수록 손실은 커집니다.
- 실제 레이블 $y$가 0일 경우, 손실은 $-\log(1 - \hat{y})$가 됩니다. 즉, 예측 확률 $\hat{y}$가 0에 가까울수록 손실은 작아지고, 1에 가까울수록 손실은 커집니다.
2) 경사 하강법을 이용한 최적화
손실 함수를 정의했으면, 경사 하강법을 사용하여 손실을 최소화하는 방향으로 모델의 가중치와 편향을 업데이트합니다. 경사 하강법은 손실 함수의 기울기(gradient)를 계산하고, 기울기의 반대 방향으로 가중치를 조금씩 수정해나가는 방법입니다.
가중치 $w$와 편향 $b$의 업데이트 규칙은 다음과 같습니다.
$$ w := w - \alpha \frac{\partial L}{\partial w} $$
$$ b := b - \alpha \frac{\partial L}{\partial b} $$
여기서 $\alpha$는 학습률(learning rate)이며, 기울기를 얼마나 반영할지 결정하는 하이퍼파라미터입니다. $\frac{\partial L}{\partial w}$와 $\frac{\partial L}{\partial b}$는 각각 손실 함수를 가중치 $w$와 편향 $b$에 대해 편미분한 값입니다.
3) 역전파 (Backpropagation)
경사 하강법을 사용하여 가중치를 업데이트하기 위해서는 손실 함수를 가중치에 대해 미분해야 합니다. 이 과정을 효율적으로 수행하기 위해 역전파(Backpropagation) 알고리즘을 사용합니다. 역전파는 각 층의 기울기를 계산하고, 이를 이전 층으로 전달하여 가중치를 업데이트하는 방식으로 동작합니다.
4. 로지스틱 회귀의 활용
로지스틱 회귀는 다양한 이진 분류 문제에 적용될 수 있습니다. 몇 가지 예시는 다음과 같습니다.
- 스팸 메일 분류: 이메일의 텍스트, 보낸 사람, 제목 등을 특징으로 사용하여 스팸 메일 여부를 분류합니다.
- 의료 진단: 환자의 증상, 검사 결과 등을 기반으로 특정 질병의 유무를 예측합니다.
- 신용 카드 사기 탐지: 거래 내역, 사용 패턴 등을 분석하여 사기 거래 여부를 판별합니다.
- 고객 이탈 예측: 고객의 활동, 구매 내역 등을 분석하여 이탈 가능성을 예측합니다.
5. 로지스틱 회귀의 구현 (파이썬 예시)
로지스틱 회귀는 파이썬의 다양한 라이브러리를 통해 쉽게 구현할 수 있습니다. 여기서는 scikit-learn 라이브러리를 사용하여 간단한 로지스틱 회귀 모델을 구현하는 예시를 보여드리겠습니다.
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
# 1. 데이터 로드 및 전처리
iris = load_iris()
X = iris.data # 특징
y = (iris.target == 0).astype(int) # 이진 분류 문제로 변환 (Setosa vs. Non-Setosa)
# 2. 데이터 분할 (훈련/테스트)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 3. 로지스틱 회귀 모델 생성 및 학습
model <mark class="highlight"><strong><u> LogisticRegression(solver</u></strong></mark>'liblinear', random_state=42)
model.fit(X_train, y_train)
# 4. 모델 예측
y_pred = model.predict(X_test)
# 5. 모델 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"정확도: {accuracy:.4f}")
위 코드는 scikit-learn을 사용하여 아이리스(Iris) 데이터셋을 이용한 이진 분류 문제를 해결하는 예시입니다. 아이리스 데이터셋은 3가지 종류의 붓꽃(Setosa, Versicolor, Virginica)에 대한 정보를 담고 있는데, 위 코드에서는 Setosa 품종과 나머지 품종을 구분하는 이진 분류 문제를 수행합니다.
- 데이터 로드 및 전처리:
load_iris()함수를 사용하여 아이리스 데이터셋을 로드하고,iris.target == 0을 통해 Setosa 품종에 해당하는 데이터는 1, 나머지 데이터는 0으로 변환합니다. - 데이터 분할:
train_test_split()함수를 사용하여 훈련 데이터와 테스트 데이터로 분할합니다. - 모델 생성 및 학습:
LogisticRegression()클래스를 사용하여 로지스틱 회귀 모델을 생성하고,fit()메서드를 사용하여 훈련 데이터를 학습합니다.solver매개변수는 최적화 알고리즘을 지정하며,liblinear는 작은 데이터셋에 적합합니다.random_state는 결과의 재현성을 위해 설정합니다. - 모델 예측:
predict()메서드를 사용하여 테스트 데이터에 대한 예측을 수행합니다. - 모델 평가:
accuracy_score()함수를 사용하여 모델의 정확도를 평가합니다.
6. 주의사항 및 트러블슈팅
1) 특징(Feature) 스케일링
로지스틱 회귀 모델의 성능은 입력 특징의 스케일에 민감할 수 있습니다. 특히 경사 하강법과 같은 최적화 알고리즘을 사용할 경우, 특징의 스케일이 다르면 학습 속도가 느려지거나, 가중치가 특정 특징에 편향될 수 있습니다. 따라서, 특징 스케일링(Feature Scaling)을 통해 입력 특징의 범위를 조정하는 것이 좋습니다.
일반적으로 사용되는 특징 스케일링 방법으로는 표준화(Standardization)와 정규화(Normalization)가 있습니다.
-
표준화: 각 특징의 평균을 빼고 표준 편차로 나누어 특징을 평균 0, 분산 1로 변환합니다.
$$ x' = \frac{x - \mu}{\sigma} $$
여기서 $x'$는 표준화된 특징, $x$는 원래 특징, $\mu$는 특징의 평균, $\sigma$는 특징의 표준 편차입니다. - 정규화: 각 특징을 0과 1 사이의 값으로 변환합니다.
$$ x' = \frac{x - x_{min}}{x_{max} - x_{min}} $$
여기서 $x'$는 정규화된 특징, $x$는 원래 특징, $x_{min}$은 특징의 최소값, $x_{max}$는 특징의 최대값입니다.
2) 불균형한 데이터셋
클래스 간의 데이터 불균형(Imbalanced Dataset)은 로지스틱 회귀 모델의 성능에 부정적인 영향을 미칠 수 있습니다. 예를 들어, 스팸 메일 분류 문제에서 스팸 메일의 수가 정상 메일의 수보다 훨씬 적을 경우, 모델은 정상 메일을 더 잘 예측하도록 학습될 수 있습니다.
불균형한 데이터셋 문제를 해결하기 위한 몇 가지 방법이 있습니다.
- 클래스 가중치 조정:
scikit-learn의LogisticRegression클래스에서class_weight매개변수를 사용하여 각 클래스에 다른 가중치를 부여할 수 있습니다. - 오버샘플링(Over-sampling): 소수 클래스의 샘플을 늘립니다. SMOTE(Synthetic Minority Oversampling Technique)와 같은 기법이 사용됩니다.
- 언더샘플링(Under-sampling): 다수 클래스의 샘플을 줄입니다.
- 다른 평가 지표 사용: 정확도(Accuracy) 외에도 정밀도(Precision), 재현율(Recall), F1 점수(F1-score)와 같은 평가 지표를 사용하여 모델의 성능을 평가합니다.
3) 과적합 (Overfitting)
로지스틱 회귀 모델은 비교적 단순한 모델이지만, 과적합될 가능성이 있습니다. 과적합은 모델이 훈련 데이터에 너무 맞춰져 새로운 데이터에 대한 일반화 성능이 떨어지는 현상입니다.
과적합을 방지하기 위한 방법으로는 다음과 같은 것들이 있습니다.
- 정규화(Regularization): L1 정규화 또는 L2 정규화를 사용하여 모델의 복잡도를 제한합니다.
- 특징 선택(Feature Selection): 중요하지 않은 특징을 제거하여 모델의 복잡도를 줄입니다.
- 교차 검증(Cross-validation): 훈련 데이터를 여러 번 나누어 모델을 평가하여 일반화 성능을 예측합니다.
7. 결론
로지스틱 회귀는 이진 분류 문제를 해결하기 위한 강력하고 효율적인 알고리즘입니다. 시그모이드 함수를 사용하여 0과 1 사이의 확률 값을 출력하고, 교차 엔트로피 손실 함수와 경사 하강법을 통해 모델을 학습합니다. 특징 스케일링, 불균형한 데이터셋 처리, 과적합 방지 등과 같은 주의사항을 숙지하면 로지스틱 회귀 모델의 성능을 더욱 향상시킬 수 있습니다.
Comments (0)
No comments yet. Be the first to comment!
Please to write a comment.