[ML] 로지스틱 회귀 (Logistic Regression)
로지스틱 회귀
주로 이진 분류(Binary Classification)를 풀기 위한 알고리즘으로 사용됨
이진 분류
이진 분류 예시
- 합격 여부
- o, x 문제
- 스팸 메일 여부
이진 분류가 되는 기준이 있을텐데 그 기준때문에 알파벳의 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에 가까워지면 오차가 커지고
그 반대인 경우에도 오차가 커져야 함
이를 충족하는 "로그"함수를 사용
실제값이 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