Classification
질적 (qualitative) 변수는 {brown, blue, green}과 같은 순서가 없는 집합 C의 값을 가진다.
feature 벡터 x와 C 집합의 값을 가지는 질적 응답 변수 y가 주어졌을 때,
classification 과제는 x를 입력으로 받아 y의 값을 예측하는 함수 f(x)를 만드는 것이다. -> f(x) ∈ C
우리는 x가 C의 각 범주에 속할 확률을 추정하는데 더 관심이 있다.
-> 보험 청구가 사기일 '확률'을 추정하는 것이 '사기/아님'으로 분류하는 것보다 더 유용하다.
Binary Classification 문제에서 타겟 변수 y는 다음과 같이 부호화 될 수 있다.
그럼 y에 대해 선형 회귀를 수행하고 예측값 y가 0.5보다 크면 'yes'로 분류하면 될까?
- 이진 출력일 경우, 선형회귀가 분류기로 괜찮을 수 있음
- 모집단에서 E[y|x] = P(y=1|x) 이므로 회귀가 적합해 보일 수 있음
- 하지만 선형 회귀는 0보다 작거나 1보다 큰 값으로 예측할 수 있기 때문에 확률로 해석하기엔 적절하지 않음
- 양성.음성 샘플 수가 불균형할 경우, 결정 경계가 잘못 설정 될 수도 있음
Logistic Regression
따라서 우리는 한 쪽은 0으로 다른 쪽은 1로 수렴해야 하는 함수가 필요하다.
선형 회귀는 이런 비선형 관계를 학습할 수 없다.
선형 함수 결과를 저런 형태로 바꿀 수 있을까?
단순한 이진 분류 설정부터 시작해보자.
- 𝐱 ∈ ℝᵈ : 𝑑개의 특성을 가진 입력 벡터
- 𝑦 ∈ {0,1} : 우리가 예측하고자 하는 타겟(label)
주어진 데이터셋 𝒟 = {(𝐱⁽ⁱ⁾, 𝑦⁽ⁱ⁾)}, i=1,…,𝑚일 때, 입력과 타겟은 다음과 같이 행렬로 나타낼 수 있다.
x를 입력 받아 y를 예측하는 이진 분류 모델을 구축하는 것을 원한다.
직접적으로 y를 예측하는 것보다 확률을 추정한다. -> 확률 임계값 기반으로 분류 가능
예제가 양성 클래스(1)에 속할 확률을 p라고 할 때, 우리는 다음과 같은 함수가 필요하다.
- 입력이 선형 회귀 점수 s일 때, 출력은 확률 p
- s가 클수록 확률 p는 1에 가까워야 함 / s가 작을수록 확률 p는 0에 가까워야 함
- s가 0에 가까울 수록 p는 0.5에 가까워야 함
이렇게 봤을 때 sigmoid 함수가 이런 동작들을 한다.
따라서 우리는 선형 회귀 모델을 학습시켜 다음을 유도할 수 있다.
- x가 양성 클래스(1) 속할 가능성이 클수록 예측값을 크게 한다.
- 속할 가능성이 낮을 수록 예측값을 작게 한다.
-> 복잡한 비선형성을 직접 고려하지 않아도 된다.
출력값이 [0,1] 범위에 있으므로, x가 클래스 1에 속할 확률로 해석이 가능하다.
클래스가 0일 확률은 다음과 같다.
이를 로지스틱 회귀라고 하며, 조건부 분포 P(y|x)를 모델링한다.
예를 들어 β^1=0.0055일 경우 balance가 증가할 수록 default 확률이 증가함을 의미한다.
큰 틀에서 보면 해석 방식은 선형 회귀와 비슷해보인다.
balance가 $1000, $2000인 경우 default 추정치는 저렇게 된다.
이제 파라미터 β를 추정하기 위해 likelihood를 최대화해보자.
likelihood는 관측된 데이터가 나타낼 확률을 나타낸다.
-> log-likelihood를 최대화한다.
즉, 우리는 다음을 최대화하고자 한다.
하지만 이 식은 closed-form solution을 가지지 않는다.
-> 미분을 0으로 두어도 β에 대한 명시적 해를 얻을 수 없다.
-> 다른 최적화 기법이 필요하다.
likelihood를 최대화하는 대신 negative log-likelihood를 최소화한다.
이것이 binary cross-entropy 손실함수이다.
Optimization: Gradient Descent
수학적 최적화( Mathematical optimization,mathematical programming)란 어떤 기준에 따라 주어진 선택지 중 가장 좋은 해를 선택하는 것이다.
최적화 방법들에는 다양한 방법이 있다.
- Exhaustive search
- Random search
- Visualization
-Greedy search (solving each variable one by one)
....
우리는 최소화하고 싶은 비용함수 ℒ(𝜷) 또는 손실함수가 있다.
핵심 아이디어는 현재 β에서의 기울기(gradient)를 계산하여 음의 방향으로 조금씩 이동하는 것을 반복한다.
여기서 기울기란 해당 지점에서의 함수의 최적 선형 근사이다.
벡터 형태의 식은 다음과 같다.
파라미터 하나에 대한 업데이트 식은 다음과 같다.
- 𝛼 : learning rate
beta = rand(vector)
while true:
beta_grad = evaluate_gradient(L, data, bete)
beta = beta - alpha * beta_grad
if (norm(beta_grad) <= threshold) break
step1. 모델 정의
step2. 목표 설정 : 손실(loss)을 최소화 -> y ≈ f(x)
step3. 학습 과정
- 학습 데이터 x을 넣고 y 예측
- 예측값과 실제값 비교하여 손실 계산
- 손실에 따라 파라미터 β를 업데이트
- 반복하여 ŷ ≈ y가 되도록 함
step4. 새로운 x에 대해 ŷ = p(y∣x)을 계산하고 예측 가능
입력 𝐱 ∈ ℝᵈ에 대해, 우리는 확률 ŷ = P(y=1 | x)을 구하고자 한다.
로지스틱 회귀 모델 정의:
- 가중치 : 𝐰 ∈ ℝᵈ
- 편향 : 𝑏 ∈ ℝ
모델을 최적화하기 위해 다음을 최소화한다.
- 예측값
- 기울기
- 경사하강법으로 파라미터 업데이트
w = np.zeros(d)
b = 0
dw = np.zeros(d)
db = 0
for i in range(m) :
a_i = sigmoid(np.dot(x_i, w) + b)
for j in range(d):
dw[j] += x_i[j] * (a_i - y_i)
db += (a_i - j_i)
for j in range(d) :
w[j] -= alpha * dw[j] / m
b -= alpha * db / m
가능하면 for 루프는 피하는 것이 좋다.
벡터화는 반복문을 효율적인 행렬 연산으로 대체한다. -> 계산 속도 향상
# 벡터화 전
z = 0
for i in range(d) :
z += w[i] * x[i]
z += b
# 벡터화 후
z = np.dot(x,w) + b
- 기존 형태
- 벡터화
'Major Study > 25-1 Deep Learning Application' 카테고리의 다른 글
[Deep learning Application] Lecture 6 : Neural Network (0) | 2025.04.27 |
---|---|
[Deep learning Application] Lecture 5: Image Classification (1) | 2025.04.25 |
[Deep learning Application] Lecture 2: Learning from data (0) | 2025.04.05 |
[Deep learning application] Lecture 3. Linear regression (0) | 2025.03.29 |