본문 바로가기
전공/머신러닝

[ML] 로지스틱 회귀 (Logistic Regression)

by mhiiii 2024. 11. 9.
728x90

로지스틱 회귀

주로 이진 분류(Binary Classification)를 풀기 위한 알고리즘으로 사용됨

 

이진 분류

이진 분류 예시

  1. 합격 여부
  2. o, x 문제
  3. 스팸 메일 여부

이진 분류가 되는 기준이 있을텐데 그 기준때문에 알파벳의 S자 형태로 그래프가 표현됨

 

 

이 그래프를 보면 x축(score)가 55일 때 result가 0, 60일 때는 1의 값을 가지는 것을 볼 수 있음

 

 

 

 

 

 

 

이렇게 S자 형태를 띄게 되면, 이 그래프는 직선 함수가 아닌 다른 비선형적인 함수가 필요하게 됨

 

따라서 이 함수는 다음과 같이 표현할 수 있게 됨

$$ H(x) = f(Wx+b)$$

f라는 S자 함수를 표현할 함수를 사용해서 정의

 

이 f는 바로 "시그모이드"함수를 의미

$$ H(x) = sigmoid(Wx + b) = \frac{1}{1 + e^{-(Wx + b)}} = σ(Wx + b) $$

 

선형 회귀에서도 최적의 W와 b를 찾는 게 목적이었듯이, 로지스틱 회귀에서도 마찬가지

 

위 그래프를 통해 시그모이드 함수는 출력값을 0과 1 사이의 값으로 조정하여 반환함

x가 매우 커지면 1에 수렴하게 됨

반대로 매우 작아지면 0에 수렴

 

이번에는 W를 조정해서 sigmoid 그래프를 변형해보기

x = np.arange(-5.0, 5.0, 0.1)
y1 = sigmoid(0.5*x)
y2 = sigmoid(x)
y3 = sigmoid(2*x)

plt.plot(x, y1, 'r', linestyle='--') # W의 값이 0.5일때
plt.plot(x, y2, 'g') # W의 값이 1일때
plt.plot(x, y3, 'b', linestyle='--') # W의 값이 2일때
plt.plot([0,0],[1.0,0.0], ':') # 가운데 점선 추가
plt.title('Sigmoid Function')
plt.show()

W가 작아질수록 더 완만한 경사도를 가지게 됨

 

앞서 선형 회귀에서는 W가 직선의 기울기를 의미했지만, 여기서는 그래프의 경사도를 결정함

 

 

이번에는 b를 조정해서 sigmoid 그래프 옮겨보기

x = np.arange(-5.0, 5.0, 0.1)
y1 = sigmoid(x+0.5)
y2 = sigmoid(x+1)
y3 = sigmoid(x+1.5)

plt.plot(x, y1, 'r', linestyle='--') # x + 0.5
plt.plot(x, y2, 'g') # x + 1
plt.plot(x, y3, 'b', linestyle='--') # x + 1.5
plt.plot([0,0],[1.0,0.0], ':') # 가운데 점선 추가
plt.title('Sigmoid Function')
plt.show()

 

위의 그래프는 b의 값에 따라서 그래프가 좌, 우로 이동하는 것을 알 수 있음

 

시그모이드 함수는 출력값을 0과 1사이로 조정할 수 있기 때문에, 이를 이용하여 분류 작업에 사용할 수 있음

 

임계값(threshold)를 정해서 그 값을 넘으면 1(True), 넘지 못하면 0(False)로 분류 가능

 


이렇게 로지스틱 회귀에서는 시그모이드를 사용하여 H(x)를 정의할 수 있음

 

이제 로지스틱 회귀에서 최적의 W와 b를 찾을 수 있는 비용함수를 정의해야함

 

선형 회귀에서 사용했던 비용 함수, MSE를 또 사용할 수 있을까??

 

$$cost(W, b) = \frac{1}{n} \sum_{i=1}^{n} \left[y^{(i)} - H(x^{(i)})\right]^2$$

 

이제 우리는 $H(x) = Wx + b$가 아닌 sigmoid로 표현된 식을 씀

 

비용 함수 MSE를 $H(x) = sigmoid(Wx + b)$에 사용된 W에 대해 미분하게 되면 

 

선형 회귀와 달리 비볼록 형태의 그래프가 나오게 됨

 

이 비볼록 형태의 단점은 경사 하강법을 사용할 경우, 오차가 최소값이 되는 구간에 도착했다고 판단한 그 구간이 실제 오차가 완전히 최소값이 되는 구간이 아닐 수 있음

 

 

 

 

 

 

 

이런 문제를 해결할 수 있도록 실제 최소 구간을 찾도록 해주어야 함

 

시그모이드 함수의 측징은 출력값이 0과 1사이의 값이기 때문에, 

실제 값이 1일 때, 예측 값이 0에 가까워지면 오차가 커지고

그 반대인 경우에도 오차가 커져야 함

 

 

이를 충족하는 "로그"함수를 사용

y=0.5 에 대칭하는 두 개의 로그 함수 그래프

 

실제값이 1일 때의 그래프를 주황색 선으로 표현하였으며,

실제값이 0일 때의 그래프를 초록색 선으로 표현

 

 

 

 

 

 

 

If y=1 → $cost( H(x), y )$ = $-log(H(x))$

If y=0 → $cost( H(x), y)$ = $-log(1 - H(x))$

 


y의 실제값이 1일 때 $-log(H(x))$ 그래프를 사용하고 y의 실제값이 0일 때 $-log(1 - H(x))$ 그래프를 사용해야 함

 

하나의 식으로 통합하면

$$ \text{cost}\left( H(x), y \right) = -[ylogH(x) + (1-y)log(1-H(x))] $$

 

  • 실제값 y가 1이라고하면 덧셈 기호를 기준으로 우측의 항이 없어짐
  • 반대로 실제값 y가 0이라고 하면 덧셈 기호를 기준으로 좌측의 항이 없어짐

 

선형 회귀에서는 모든 오차의 평균을 구해 평균 제곱 오차를 사용

마찬가지로 여기에서도 모든 오차의 평균을 구해야 함

 

$$ cost(W) = -\frac{1}{n} \sum_{i=1}^{n} [y^{(i)}logH(x^{(i)}) + (1-y^{(i)})log(1-H(x^{(i)}))] $$

 

정리하면, 위 비용 함수는 실제값 y와 예측값 H(x)의 차이가 커지면 cost가 커지고,

실제값 y와 예측값 H(x)의 차이가 작아지면 cost는 작아짐.

이제 위 비용 함수에 대해서 경사 하강법을 수행하면서 최적의 가중치 W를 찾게 됨 !!

 

$$W := W - α\frac{∂}{∂W}cost(W)$$

 

Reference

https://wikidocs.net/57805

728x90