[Logistic 회귀] Logistic 회귀

신현호·2022년 5월 3일
0

Machine Learning

목록 보기
6/8

지난 포스팅에서는 Odds 에 대해 알아보았습니다.
https://velog.io/@shh0422/Logistic-%ED%9A%8C%EA%B7%80-Odds

이번 포스팅에서는 본격적으로 Logistic 회귀에 대해 알아보려고 합니다.

Logistic 회귀?

아래와 같은 데이터를 살펴보겠습니다.

x축은 설명변수, y축은 0과 1만을 가질 수 있는 이진형 종속변수입니다.

우리는 이 데이터를 나타낼 수 있는 최적의 선을 찾으려고 합니다.

그런데 만약 선형회귀 방식을 사용한다면 다음과 같은 선을 얻을 것입니다.

하지만 이것은 그리 만족스럽지 않은 결과입니다.
왜냐하면 지금은 y축이 연속형 변수가 아닌 0과 1 만을 가질 수 있는 이진형 변수이기 때문입니다.

우리의 데이터를 잘 나타낼 수 있는 선은 아마도 다음과 같은 모양이겠죠.

우리는 위 그림과 같은 초록 선의 방정식을 찾고 이것을 마치 확률처럼 생각할 것입니다.

초록선의 방정식이

y=p(x)\qquad y = p(x)

라면 p(x)p(x)xx에 대한 종속변수의 예측값이 1일 확률로 생각하는 것이죠.


초록선의 방정식 찾기

사실 위 그림의 초록선과 같은 형태의 함수는 한 가지가 아닙니다.
따라서 우리는 초록선을 나타낼 수 있는 여러 함수 중 하나를 골라야 합니다.

여기서는 전 포스팅에서 다루었던 Odds 에 관련된 함수를 사용하려고 합니다.
다만 Logistic 회귀에서 왜 Odds 의 개념을 사용했는지는 아직 이해하지 못했습니다.
(아시는 분 있으면 댓글로 알려주세요)

이제 구체적으로 초록선의 방정식을 찾아보겠습니다.
초록선의 방정식을 찾는다는 말은 xx가 어떻게 확률 p(x)p(x)에 대응되는지 그 규칙을 찾는다는 말과 같습니다.

xx를 어떻게 확률 p(x)p(x)에 대응시키는 과정은 크게 두 단계로 쪼개볼 수 있는데요, 각 과정은 다음과 같습니다.

  1. xxβ0+β1x\beta_0 + \beta_1 x 로 대응
  1. β0+β1x\beta_0 + \beta_1xp(x)=1e(β0+β1x)+1p(x) = \dfrac{1}{e^{-(\beta_0 + \beta_1x)}+1} 로 대응

먼저 1번 과정은 xx 를 간단하게 선형변환하는 과정입니다.
여기서 등장하는 β0,β1\beta_0, \beta_1 을 구하는 것이 이번 포스팅의 최종 목적입니다.

여기서 중요한 것은 대응 전과 대응 후에 가질 수 있는 값의 범위가 어떻게 변화했는지입니다.

xx 가 가질 수 있는 값의 범위는 (,)(-\infty, \infty) 입니다. (일반적인 상황을 가정하였습니다)
그리고 β1\beta_1이 0이 아닌 이상 β0+β1x\beta_0 + \beta_1x 가 가질 수 있는 값의 범위 또한 (,)(-\infty, \infty) 입니다.

즉, 1번 대응에 의해서는 값이 가질 수 있는 범위가 변하지 않았습니다.


다음으로 2번 과정을 살펴보겠습니다.

우리는 (,)(-\infty, \infty) 범위의 값을 가지는 β0+β1x\beta_0 + \beta_1x[0,1][0, 1] 범위의 값을 가지는 확률로 대응시켜야 합니다.

그런데 서로 대응되어야 하는 구간이 무언가 익숙하지 않나요?

이전 포스팅에서 다루었던

ln(Odds(p))=ln(p1p\qquad \ln(Odds(p)) = \ln(\dfrac{p}{1-p})

함수가 [0,1][0, 1](,)(-\infty, \infty) 로 대응시켰었죠.
지금 하고 싶은 것은 방향이 거꾸로 된 대응이므로 ln(Odds(p))\ln(Odds(p)) 의 역함수를 사용해주면 됩니다.

즉, 다음 함수의 역함수를 구하면 됩니다.

y=ln(x1x)\qquad y = \ln(\dfrac{x}{1-x})

역함수를 구하기 위해 x,yx, y 를 서로 바꾸면

x=ln(y1y)\qquad x = \ln(\dfrac{y}{1-y})

ex=y1y\qquad \Rightarrow e^x = \dfrac{y}{1-y}

(1y)ex=y\qquad \Rightarrow (1-y)e^x = y

exyex=y\qquad \Rightarrow e^x - ye^x = y

ex=(ex+1)y\qquad \Rightarrow e^x = (e^x + 1)y

y=exex+1\qquad \Rightarrow y = \dfrac{e^x}{e^x+1}

분자, 분모를 exe^x로 나눠주면

y=1ex+1\qquad y = \dfrac{1}{e^{-x}+1}

이 됩니다.

따라서 (,)(-\infty, \infty) 범위의 값을 가지는 β0+β1x\beta_0 + \beta_1x[0,1][0, 1] 범위의 값을 가지는 확률 p(x)p(x)로 대응시키려면
β0+β1x\beta_0 + \beta_1x1ex+1\dfrac{1}{e^{-x}+1}xx 자리에 집어넣으면 됩니다.

p(x)=1e(β0+β1x)+1\qquad p(x) = \dfrac{1}{e^{-(\beta_0 + \beta_1x)}+1}

이것이 바로 우리가 찾고 싶었던 초록선의 방정식입니다.


정리하면 x, β0+β1x, p(x)x, \space \beta_0 + \beta_1x, \space p(x) 의 관계는 다음과 같습니다.


회귀 계수 구하기

각종 회귀모델에서 회귀계수를 구하는 방식은 근본적으로 모두 동일합니다.

먼저 Error 함수를 정의한 후 해당 Error 를 최소화시키는 계수를 찾는 방식이지요.

그러면 Logistic 회귀 모델에서는 Error 함수를 어떻게 정의하면 좋을지 생각해보겠습니다.


원본 데이터가 다음과 같다고 가정해보겠습니다.

X=[1,2,3]\qquad X = [1, 2, 3]
Y=[0,0,1]\qquad Y = [0, 0, 1]

그리고 우리의 확률 예측 함수 p(x)p(x) 는 다음과 같은 예측을 했다고 생각해봅시다.

p(1)=0.1\qquad p(1) = 0.1
p(2)=0.3\qquad p(2) = 0.3
p(3)=0.9\qquad p(3) = 0.9

이 경우 모델의 Error 를 어떻게 수치화할 수 있을까요?

먼저 p(1)=0.1p(1) = 0.1 을 해석해보면 다음과 같습니다.

x=1\qquad x = 1 에 대한 yy 값이 11일 확률이 0.10.1이다.
\qquad바꾸어 말하면, x=1x = 1 에 대한 yy 값이 00일 확률이 0.90.9이다

그런데 x=1x = 1 에 대한 실제 yy 값은 0이므로 p(1)=0.1p(1) = 0.1 의 주장에 따라 yy 값을 예측했을 때 답을 맞출 확률은 0.90.9로 생각할 수 있습니다.

마찬가지로 p(2)=0.3p(2) = 0.3 의 주장에 따라 yy 값을 예측했을 때 답을 맞출 확률은 0.70.7입니다.

같은 논리로 생각해보면 p(3)=0.9p(3) = 0.9 의 주장에 따라 yy 값을 예측했을 때 답을 맞출 확률은 0.90.9입니다.

이를 종합해보면 p(x)p(x) 의 주장에 따라 yy 값을 예측했을 때 모두 맞출 확률은

0.9×0.7×0.9\qquad 0.9 \times 0.7 \times 0.9

가 됩니다. 확률이니까 서로 곱하는 것이 자연스럽죠.

이 값이 1에 가까울수록 p(x)p(x) 를 신뢰할 수 있습니다. 즉, Error 가 0에 가까운 것이죠.
반대로 이 값이 0에 가까울수록 p(x)p(x) 를 신뢰할 수 없습니다. 즉, Error 가 높은 것이죠.

따라서 이 값을 11일 때는 00으로, 00일 때는 엄청 큰 값으로 한 번 더 대응시켜주면 훌륭한 Error 함수가 됩니다.

ln(1)=0\qquad -\ln(1) = 0
limx+0(ln(x))=+\qquad \lim \limits_{x \to +0}{(-\ln(x))} = +\infty

한 번 더 대응에 사용될 함수는 ln(x)-ln(x) 가 적당하겠네요.

따라서 우리는 Error를 다음과 같이 표현할 수 있습니다.

Error=ln(0.9×0.7×0.9)=ln(0.9)ln(0.7)ln(0.9)\qquad Error = -\ln(0.9 \times 0.7 \times 0.9) = -\ln(0.9) - \ln(0.7) - \ln(0.9)


이제 Error 함수를 β0,β1\beta_0, \beta_1 에 대한 식으로 표현하고 이것을 최소화하는 계수를 찾는 과정을 거치면 β0,β1\beta_0, \beta_1을 구할 수 있습니다.
해당 과정은 훌륭한 설명이 있는 링크로 대체하겠습니다.
https://angeloyeo.github.io/2020/09/23/logistic_regression.html


이번 포스팅에서는 Logistic 회귀를 전반적으로 알아보았습니다.

감사합니다.

profile
수학요정니모

0개의 댓글