로지스틱 회귀 (Logistic Regression)
로지스틱 회귀(Logistic Regression)는 사건(Event)이 발생할 가능성을 예측하는 데 사용하는 모델이다.
주로 특정 조건(환경)이 주어졌을 때, 사건이 일어는지, 일어나지 않는지에 대해 다루곤 한다.
위 그래프는 로지스틱 회귀를 그래프로 나타낸 것이다.
X축에는 (조건을 모두 고려하였을 때의) 점수, Y축으로 결과가 나타나 있는데,
결과를 보면 알다시피 0과 1로만 이루어진 모습을 확인할 수 있을 것이다.
즉, 사건이 일어나고(1) 일어나지 않고(0)를 예측하는 것이 로지스틱 회귀 모델의 목표라는 뜻이다.
사례를 들어 더 구체화해보도록 하자.
- 화재가 발생했을 때, 산소가 X만큼 부족해지면 '사망한다 or 사망하지 않는다.'
- 교통사고가 발생했을 때, 충격량이 X일 때 '중상을 입는다 or 입지 않는다.'
- 타이타닉에서 사고가 벌어졌을 때, X라는 조건이 주어지면 '사망한다 or 사망하지 않는다.'
이처럼 로지스틱 회귀 모델은 여러 조건을 부합하여,
결과를 0(사건이 발생하지 않음)과 1(사건이 발생함)로 출력하는 역할을 수행한다.
이제, 로지스틱 회귀모델에서 사용하는 시그모이드(Sigmoid) 함수에 대해 알아보자!
시그모이드(Sigmoid) 함수
이 식은 로지스틱 회귀모델에서 활성화 함수로 사용하는 '시그모이드(Sigmoid) 함수'이다.
그냥 봤을 땐, 다소 낯설게 느껴질 수 있기에 코드와 그래프를 통해 설명하겠다.
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-6, 6, 0.1)
phi = 1 / (1 + np.exp(-x))
plt.plot(x, phi)
plt.xlabel('x')
plt.ylabel('phi')
plt.show()
해당 코드는 시그모이드 함수를 구현한 코드이다.
위 코드를 입력하고 실행하면 아래와 같은 코드가 그려질 것이다.
이렇게 시그모이드 함수를 그래프로 표현하면, 위 그래프와 같은 S자 모양이 그려진다.
시그모이드 함수 식에 x값으로 0을 대입하면, 정확히 0.5라는 결과로 계산되는데,
이를 토대로, x가 0보다 크면 y는 0.5를 기준으로 긍정(사건이 발생) 결과가 나타나고,
x가 0보다 작다면, y는 0.5를 기준으로 부정(사건이 발생하지 않는) 결과가 나타날 것이라는 것을 의미한다.
경우에 따라 y가 정확히 0.5일 때에는 긍정이라고 보는 경우도 있고, 부정으로 보는 경우도 있다.
그렇다면, 왜 시그모이드 함수를 사용해야 하는 것인가?
단순히 선형회귀 모델을 사용하지 않고, 굳이 시그모이드 함수를 사용해야 하는 이유는
사건이 발생하고, 발생하지 않는 결과를 선형으로 표현하게 됐을 때 문제점이 발생하기 때문이다.
위 그림은 시그모이드 함수를 사용하지 않고, 선형으로만 사건의 발생 여부를 표현했을 때의 그래프이다.
대부분 x값이 5보다 크면 사건이 발생하고, 5보다 작으면 사건이 발생하지 않는다고 나타내고 있다.
하지만 x가 9 임에도 불구하고, 사건이 발생하지 않아, 해당 경우일 때의 값을 그래프에 추가했다고 가정해보자.
기존에는 5보다 크다면 사건이 발생할 것이라고 예측했던 모델에 큰 문제가 발생하게 될 것이다.
분명 5보다 큰 값임에도 불구하고, 사건이 발생하지 않았기 때문이다.
즉, 새로운 값의 추가가 기존 분류 모델에 큰 영향을 미치게 되는 문제점이 발생한다.
이런 문제점을 해결하기 위해, 도입된 식이 바로 시그모이드 함수이다.
그래프를 직선으로 표현하는 것 대신, 완만한 S자형 곡선으로 나타낼 수 있다면 위와 같은 상황을 방지할 수 있기 때문이다.
기존의 선형회귀가 아닌 분류 문제에서 보다 유용하게 사용할 수 있도록 로지스틱 회귀모델에 시그모이드 함수를 적용하게 된 것이다.
다음 글에서는 로지스틱(Logistic) 회귀 모델을 사용하여,
타이타닉에서 사고가 일어났을 때, 내가 특정 조건에 있다면 과연 살아남을 수 있을지에 대해 예측해보는 모델을 만들어보며 조금 더 구체적으로 공부해보는 시간을 갖도록 해보자.
전체 소스코드는 아래 링크를 통해 참조할 수 있다.
전체 소스 코드 :
https://colab.research.google.com/drive/1sAVoWmdIV6VUUBYQExgEWOU_TTzcQggY
(이해가 다소 힘들거나, 틀린 부분이 있다면 댓글 부탁드리겠습니다! 😊)
💖댓글과 공감은 큰 힘이 됩니다!💖