지금까지는 시험 점수처럼 연속적인 값을 예측하는 Linear Regression을 배웠습니다.
이번엔 합격/불합격처럼 둘 중 하나를 분류하는 Logistic Regression을 알아보겠습니다.
Classification : 0과 1로 나누기
머신러닝에서 분류(Classification)란 데이터를 0 또는 1 로 나누는 것입니다.
문제 0 1
| 시험 | 불합격 | 합격 |
| 스팸 메시지 | 스팸 아님 | 스팸 |
| 얼굴 인식 | 가짜 얼굴 | 진짜 얼굴 |
머신러닝으로 분류 문제를 풀려면 결과가 반드시 0과 1 로 나뉘어져야 합니다.
Logistic vs Linear
| Linear Regression | Logistic Regression | |
| 목적 | 연속적인 값 예측 | 0 또는 1 분류 |
| 예시 | 시험 점수 예측 | 시험 합격/불합격 예측 |
| 데이터 | 이어지는 연속적인 값 | 두 가지 케이스로 구분 |
- Linear : 새로운 데이터가 와도 인근하는 연속적인 값을 예측할 수 있습니다
- Logistic : 두 가지 케이스를 구분선으로 나눌 수 있는 데이터를 다룹니다
Linear로 분류하면 안 되는 이유
공부 시간(x)과 합격/불합격(y)을 2차원 그래프로 그려봅시다.
이걸 Linear로 연결하면 수치형 데이터가 나오게 됩니다.
예를 들어 0.3, 0.7, 1.2, -0.1 같은 값들이 나오는데,
이러면 0과 1로 딱 떨어지는 합격/불합격 판단이 어려워집니다.
그래서 아래와 같은 S자 형태의 그래프가 필요합니다.
1 | ___________
| /
| /
0 |_____/
------------------>
x (공부 시간)
Hypothesis : 로지스틱 함수로 감싸기
Linear Regression의 가설은 다음과 같았습니다.
H(X) = XW
여기에 로지스틱 함수 g() 로 감싸줍니다.
H(X) = g(XW)
전체 흐름은 다음과 같습니다.
x → Linear → Logistic 함수 → > 0.5 (Decision Boundary) → Y∈{0,1}
Linear 결과를 로지스틱 함수에 통과시켜 0~1 사이의 값으로 변환하고,
그 값이 0.5보다 크면 1, 작으면 0으로 최종 분류합니다.
Sigmoid (Logistic) Function
로지스틱 함수로 사용하는 것이 바로 시그모이드(Sigmoid) 함수입니다.
g(z) = e^z / (e^z + 1) = 1 / (1 + e^-z)
지수(e)는 기하급수적으로 증가하는 특성이 있습니다.
- z가 + (양수) 이면 → e^-z 가 0으로 수렴 → 1 / (1+0) = 1
- z가 - (음수) 이면 → e^-z 가 ∞ 로 증가 → 1 / (1+∞) = 0
즉 어떤 값이 들어와도 결과가 항상 0~1 사이로 나옵니다.
이것이 바로 0과 1로 분류하기에 적합한 이유입니다.
Decision Boundary
시그모이드 함수를 통과한 값을 0.5를 기준으로 분류합니다.
출력값 >= 0.5 → 1 (합격)
출력값 < 0.5 → 0 (불합격)
이렇게 데이터를 걸러내기 위한 구간을 결정하는 것을 Decision Boundary(결정 경계) 라고 합니다.
Cost Function
Linear Regression에서는 가설과 실제값의 차이를 제곱해서 cost를 구했습니다.
하지만 Logistic Regression에서 같은 방식을 사용하면 문제가 생깁니다.
시그모이드 함수가 들어가면 가설에서 실제값을 뺐을 때 구불구불한 형태의 그래프가 나옵니다.
경사 하강법이 제대로 동작하려면 cost 함수가 볼록(Convex)한 구조여야 하는데,
구불구불하면 Local Minimum에 빠질 위험이 있습니다.
이 문제를 해결하기 위해 log 함수를 사용합니다.
cost(W, y) = -log(H(x)) if y = 1
= -log(1 - H(x)) if y = 0
- y = 1 일 때 : H(x)가 1에 가까울수록 cost → 0, H(x)가 0에 가까울수록 cost → ∞
- y = 0 일 때 : H(x)가 0에 가까울수록 cost → 0, H(x)가 1에 가까울수록 cost → ∞
이 두 식을 하나로 합치면:
cost(W, y) = -y * log(H(x)) - (1-y) * log(1 - H(x))
이렇게 하면 cost 함수가 Convex한 구조를 갖게 되어 경사 하강법을 안전하게 적용할 수 있습니다.
경사 하강법 적용
cost 함수를 정의한 뒤에는 Linear Regression과 동일하게 경사 하강법(Gradient Descent) 을 적용해 W를 업데이트합니다.
W := W - α * ∂cost/∂W
전체 흐름 정리
입력 X
↓
H(X) = XW (Linear)
↓
g(H(X)) = sigmoid (0~1 사이 값으로 변환)
↓
Decision Boundary (0.5 기준으로 분류)
↓
Y ∈ {0, 1} (최종 분류 결과)
정리
개념 설명
| Classification | 결과를 0 또는 1로 분류하는 것 |
| Sigmoid 함수 | 어떤 값이든 0~1 사이로 변환해주는 함수 |
| Decision Boundary | 0.5를 기준으로 0과 1을 나누는 경계 |
| Cost Function | log 함수를 사용해 Convex한 구조로 만든 비용 함수 |
다음 포스트에서는 Logistic Regression을 실제 TensorFlow 코드로 구현해보겠습니다! 🚀
'AI > ML' 카테고리의 다른 글
| Logistic Regression 코드로 구현해보기 (TensorFlow) (0) | 2026.03.09 |
|---|---|
| AI 공부를 위한 파이썬 개발 환경 구축하기 (Windows) (0) | 2026.03.08 |
| Multi-variable Linear Regression 코드로 구현해보기 (TensorFlow) (0) | 2026.03.07 |
| Multi-variable Linear Regression : 여러 변수로 예측 정확도 높이기 (0) | 2026.03.06 |
| 경사 하강법(Gradient Descent) 코드로 구현해보기 (TensorFlow) (0) | 2026.03.05 |