당니의 개발자 스토리
Logistic Regression 본문
SVM과 Logistic Regression는 어떻게 다른지 비교할 것.
SVM은 마진이 얼마나 큰가를 다룰 때도 결국 대부분의 데이터 지점들은 의사 결정에 참여 하지 못하고 마진에 영향을 미치는,
즉 경계에서 가까운 데이터들만 결정에 영향을 미치는 단점이 있었음

🔴 빨간 X들: ‘빨간 클래스’ (예: 고양이 아님)
🔵 파란 동그라미들: ‘파란 클래스’ (예: 고양이)
↘️ 검은색 대각선: 분류 기준선 (수식으로는 x₁ + x₂ = 1)
이 선을 기준으로 왼쪽 아래는 빨간 쪽, 오른쪽 위는 파란 쪽이라고 기계가 판단하려고 함
Soft Guess
이 점은 선보다 훨씬 오른쪽 위에 있으니까, 거의 확실히 파란색일 거야!"
→ Certainly Blue
반대로,
"이 점은 선보다 왼쪽 아래 쪽에 있으니까, 빨간색일 가능성이 높겠네!"
→ Probably Red
그런데 문제는 선에 가까운 점은 애매하다.
왜? 예를 들어
친구 얼굴을 보고 맞히는 게임
사진을 보는데 너무 어두워서 잘 안 보임.
→ 완전 밝은 사진이면 “확실히 철수야!”라고 할 수 있음
→ 근데 어둡고 흐릿하면 “아마 철수일걸…?” 하게 됨.
이 느낌으로
선에서 멀리 떨어진 파란 점 → “거의 확실히 파란색 클래스”
선에서 멀리 떨어진 빨간 점 → “거의 확실히 빨간색 클래스”
반면, 선 근처에 있는 점을 보고는 이건 애매해서 확신을 못 하는 것. 빨간일 수도, 파랑일 수도..

기계가 예측하는 방식 2가지
1. Hard Guess – 딱 잘라서 말하기
그냥 1 아니면 -1 중 하나만 말함
"이건 무조건 고양이!" or "이건 무조건 고양이 아님!"
→ 확률 같은 거 없음. 무조건 단정함
2. Soft Guess – 확률로 말하기
이건 더 조심스럽고 똑똑한 방식
“고양이일 확률은 70%, 아닐 확률은 30%야!”
"나는 확신은 못하지만 이럴 가능성이 더 커 보여~"
→ 선 근처 애매한 점한테 딱 어울리는 방식

Logistic Function (로지스틱 함수)란?
아무 숫자나 넣으면 0부터 1 사이의 값(확률처럼 생긴 숫자)을 뱉는 함수
그래서 이 로지스틱 함수를 활용해서 함수 클래스를 제한하는 것이 로지스틱 회귀 이다.
만약 거의 0에 가까운 숫자 나오면 "거의 아닐 거야"
0.5 나오면, "애매해, 반반이야"
거의 1 나오면 "거의 맞을 거야!"
오른쪽에 그려진 파란 S자 곡선 시그모이드 함수 라고도 부른다.

"이거 빨간 거야, 파란 거야?"를 맞히는 분류 문제에서 구한 걸 로지스틱 함수에 넣으면 확률을 뱉어줌
그리고 모든 점들의 함수들을 모두 모아놓은게 G 라는 모델 클래스다.
a랑 b 값을 계속 바꿔가면서 "어떤 게 제일 잘 맞추는 조합일까?"를 찾아가는 과정
aᵀx + b 값이 아주 크면 → 파란일 확률 ≈ 1
aᵀx + b 값이 아주 작으면 → 파란일 확률 ≈ 0
aᵀx + b ≈ 0 이면 → 애매한 0.5 (50%)

Cross Entropy Loss는 로지스틱 회귀 모델에서 구한 확률이 진짜 정답이랑 얼마나 맞았는지를 평가하는 손실 함수
왜 필요할까?
기계가 어떤 사건이 일어날 확률을 추측함.
“비 올 확률 70%” 라고 예측했는데, 진짜로 비가 왔다.
“비 올 확률 30%” 라고 예측했는데, 진짜로 비가 왔다.
→ 둘 다 비가 왔다는 예측은 맞긴 맞았는데,
두 번째는 확신이 부족했으니 손실을 더 많이 줘야함.
예측: 비 올 확률 0.9, 진짜로 비 옴
→ log(1 / 0.9) = 약 0.05 (손실 작음)
loss = log(1 / ŷ(yᵢ))
예측: 비 올 확률 0.3, 진짜로 비 옴
→ log(1 / 0.3) = 약 0.52 (손실 큼)
정답을 확신할수록 더 좋은 점수를 받는 구조이다/

Cross Entropy Loss 라는 것은 KL Divergence에 의해서 유도된 식이다.
그래서 log 함수를 쓰고 확률의 역수를 사용한 것임
기계 예측:
[0.7, 0.3] → 빨간일 확률 0.7, 파란일 확률 0.3
실제 정답:
[0, 1] → 빨간일 확률 0, 파란일 확률 1 (즉 y = 1)
→ 이 두 개의 확률 분포가 얼마나 멀리 떨어져 있는가(확률 분포 사이의 거리)를 수치로 재보는 것이 KL Divergence (상대 엔트로피)
그래서 Cross Entropy Loss는 KL Divergence 이론적인 근거에 기반하고 있다.
이제 지도학습 이라는 프레임워크에 기반해서 로지스틱 회귀를 설명할 거다.

로지스틱 손실 (Logistic Loss)은 매끄러운 곡선 이고, z값이 커지면 손실이 0에 가까워짐.
힌지 손실 (Hinge Loss)은 SVM에서 쓰는 손실 함수이고, 일정 기준 이상 맞추면 아예 패널티를 안 준다.
다시 말해서 이 로지스틱 회귀에서의 Logistic Loss 함수는 Hinge Loss와 식의 형태가 유사 하지만,
Hinge Loss에서 사용하는 이 미분 불가능한 부분이 이렇게 부드럽게 바뀐 로지스틱 손실로 대체된 그러한 형태의 함수라고 생각하면 됨

지금까지 배웠던 이진 분류 (binary classification) 개념에서 한 단계 확장된 개념
-> Multiclass Classification (다중 클래스 분류)
이젠 고양이 vs 고양이 아님 같은 이진 분류가 아니라,
고양이, 개, 비행기, 배, 자동차 중 하나를 고르는 문제로 확장됨
다중 클래스 분류 방법
1. 여러 개의 이진 분류기를 사용하는 방법 (One-vs-Rest)
예를 들어, "개냐 아니냐", "고양이냐 아니냐", … 이런 분류기를 각각 만들어서
가장 확신하는 쪽을 정답으로 고르는 방식
단점은 계산도 많이 들고 각 확률이 서로 비교 불가능할 수도 있어서 버림
2. Softmax 함수 사용
여러 클래스에 대해 모든 확률의 합이 1이 되게 만드는 함수
그래서 오늘 배우는 내용은 다중 클래스 분류는 소프트맥스(Softmax) 함수를 써서,
여러 클래스 중 가장 확률이 높은 걸 선택하는 방식에 대해서 알아볼 것이다.

Softmax는 로지스틱 함수의 다중 클래스 버전
입력: 점수 벡터 z = [z₁, z₂, ..., z_K]
(예: 고양이 점수 2.1, 개 점수 0.9, 말 점수 -1.2…)
소프트맥스는 각 점수 zᵢ에 대해 softmax(zᵢ) = e^(zᵢ) / Σ e^(zⱼ) 이렇게 계산함.
각각의 출력은 항상 양수 (e^x이기 때문에)
그리고 전체 확률의 합이 1이 됨 (즉, 확률 분포처럼 됨)
softmax(2.0) ≈ 0.65 -> 강아지일 확률
softmax(1.0) ≈ 0.24 -> 배일 확률
softmax(0.1) ≈ 0.11 -> 비행기일 확률
그래서 확률이 가장 큰 값을 보고 모델은 강아지가 제일 가능성 커보여! 하고 말하는 것과 똑같다.

Logistic Regression ⊆ Softmax Regression
이진 분류인 Logistic Regression의 일반화 버전이 Softmax Regression 이다.
Logistic Regression은 사실 그 중 가장 간단한 케이스였다는 것이다.
이름에서 나와있듯이 하드하게 Max를 찾는 게 아니라, 소프트하게 MAX를 찾는다.
Softmax Regression을 보면 입력 x가 있을 때, 두 개의 score를 만든다
h₀ = 0 (기준점, 더미 값)
h₁ = aᵀx + b (선형함수, 우리가 관심 있는 클래스의 점수)
오른쪽 수식을 보면, 로지스틱 함수 정확히 동일한 함수가 나오는 모습을 확인할 수 있음
Softmax Regression을 지도학습 프레임워크에 넣어서 생각을 해보면,

x는 입력 데이터 (예: 이미지, 숫자 등)
y는 정답 라벨 (예: 고양이=0, 개=1, 말=2 처럼 숫자)
입력 x에 대해 각 클래스별 점수를 계산
h₁ = a₁ᵀx + b₁
h₂ = a₂ᵀx + b₂
h₃ = a₃ᵀx + b₃
예: [고양이 점수, 개 점수, 말 점수] = [2.3, 1.1, 0.7]
그리고 이 점수를 Softmax 함수에 넣어서 확률로 바꿈.
이렇게 해서 전체 확률 합이 1이 되는 벡터를 얻는다.
Loss Function은 이제 여기에서 실제 정답 클래스의 확률만 꺼내서 log(1 / 확률)로 손실을 계산함.
loss = log(1 / ŷ(yᵢ)) → 즉, 정답 클래스의 확률이 낮으면 손실이 큼

Function class (행렬로 표현)
Loss function은 우리가 계속 사용해왔던 Cross Entropy Loss를 사용한다고 생각하면 된다.

모델이 예측한 결과가 실제와 얼마나 잘 맞았는지를 평가하는 지표
-> False Positive / False Negative / Precision / Recall
실제 예시: 코로나 검사
False Positive (위양성):
감염 안 됐는데 양성 판정 (괜히 격리함)
False Negative (위음성):
진짜 감염됐는데 음성 판정 (이게 더 위험!)
→ 코로나처럼 위험한 질병일수록 false negative보다 false positive를 선호하는 경향이 있음

Precision과 Recall은 반비례하는 경우가 많다.
Precision(정밀도) = TP / (TP + FP) → 모델이 맞다고 예측한 것들 중에서, 진짜로 맞은 게 얼마나 되는지
Recall(재현율) = TP / (TP + FN) → 맞아야 하는 것들 중에서, 모델이 얼마나 잘 찾아냈는지
Precision을 높이고 싶다면?
→ 확신 있는 것만 예측해야함 → 놓치는 게 많음 → Recall 낮아짐
Recall을 높이고 싶으면?
→ 일단 많이 예측해야 함 → 틀린 것도 많음 → Precision 낮아짐
F1-score란?
Precision과 Recall의 조화 평균 (harmonic mean)
F1 = 2 * (Precision * Recall) / (Precision + Recall)
→ 둘 다 높아야 F1도 높게 나온다.
→ 한 쪽만 높고 한 쪽이 낮으면 F1이 낮아짐 (밸런스 중요)
Precision과 Recall을 동시에 평가할 수 있는 ROC나 Area Under Curve 라고 하는 지표를 살펴보겠다.

True Positive Rate (TPR)
→ 실제 정답이 1인 것 중에서 모델이 맞게 1이라고 예측한 비율
→ 예시: 암 환자 100명 중에 80명을 정확히 암이라고 예측했다면, TPR = 80 / 100 = 0.8
False Positive Rate (FPR)
→ 실제 정답은 0인데 모델이 틀리게 1이라고 예측한 비율
→ 예시: 건강한 사람 100명 중에 10명을 암이라고 잘못 예측했다면, FPR = 10 / 100 = 0.1
극단적인 경우
모든 사람에게 “암입니다”라고 말하는 경우
진짜 암 환자는 다 잡지만, 건강한 사람도 암이라고 함
이때 TPR = 1, FPR = 1
항상 Negative라고만 말하는 경우
예: 모두에게 “괜찮습니다”라고 말하는 경우
암 환자를 하나도 못 잡음
이때 TPR = 0, FPR = 0
Random Guess (무작위 예측)
예: 동전 던지듯 예측
맞고 틀리는 게 거의 반반이라 TPR과 FPR이 비슷함
오른쪽 그래프를 보면 이게 ROC Curve인데,
X축: False Positive Rate (FPR)
Y축: True Positive Rate (TPR)
완벽한 모델: 왼쪽 위 모서리에 가까움 (파란 점, TPR 1 / FPR 0)
좋은 모델: 위로 불룩한 곡선 (초록색, 하늘색처럼)
랜덤 모델: 대각선 (빨간 점선)
나쁜 모델: 대각선보다 아래 (이건 차라리 반대로 예측하는 게 나음)

'LG Aimers > AI Essential Course' 카테고리의 다른 글
| MDP and Planning (0) | 2025.07.30 |
|---|---|
| More On Supervised Learning Beyond (0) | 2025.07.28 |
| Classification (0) | 2025.07.27 |
| Gradient Descent (0) | 2025.07.27 |
| Linear Regression (0) | 2025.07.26 |