페이지

2021년 1월 25일 월요일

로지스틱 회귀 이해

로지스틱 회귀 이해

1. 문제 정의

1.1. 데이터 세트

로지스틱 회귀에 대한 이해를 돕기 위하여 다음과 같이 두 종류의 데이터 세트를 준비하고 설명을 진행합니다.

Dataset-A:

x=[1,2,3,4,5,6,7,8,9,10],y=[0,0,0,0,0,1,1,1,1,1]x=\left[ 1,2,3,4,5,6,7,8,9,10 \right] , \quad y=[0,0,0,0,0,1,1,1,1,1]

Dataset-B:

x=[1,2,3,4,5,6,7,8,9,10],y=[0,0,0,0,1,0,1,1,1,1]x=\left[ 1,2,3,4,5,6,7,8,9,10 \right] ,\quad y=[0,0,0,0,1,0,1,1,1,1]

위에서 xx는 독립 변수이고 yy는 종속 변수입니다. yy00 또는 11을 값으로 가집니다.

위 그래프에 나타나 있듯이 Dataset-A에서는 xx축의 특정 값을 기준으로 yy00인 경우와 11인 경우로 명확하게 나누어지고 Dataset-B에서는 xx축의 일정 구간에서 yy00인 경우와 11인 경우가 서로 섞여 있다는 것을 알 수 있습니다.

1.2. 해결 과정

문제 해결 과정을 아래의 단계로 구분할 수 있습니다.

  1. 데이터 세트의 특성을 잘 나타내는 모델 함수(hypothesis)를 찾습니다. 모델 함수가 가지고 있는 파라미터들은 특정 데이터 세트에 맞추기 위해 조정하는 요소들입니다.
  2. 데이터 세트의 yy값과 모델 함수가 예측하는 값의 차이의 정도를 나타내는 비용 함수(cost function)를 정의합니다.
  3. 데이터 세트에 대하여 비용을 최소화하도록 모델 함수의 파라미터를 찾습니다.

이렇게 얻은 모델 함수를 사용하여 새로운 데이터 xx가 주어질 때 yy값이 얼마일지 예측합니다.

2. 모델함수 찾기

다음은 모델 함수를 찾는데 도움이 될만한 데이터 세트의 특성입니다.

  1. 데이터의 xx값에 따라 yy값이 0011로 구분됩니다.
  2. xx값이 어떤 임계값보다 작을 때는 yy값이 00일 가능성이 크고, 임계값보다 크면 yy값이 11일 가능성이 크다라고 말할 수 있습니다.
  3. yy값이 00인 데이터와 11인 데이터의 xx값이 서로 겹치는 구간이 데이터 세트에 따라 매우 좁을 수도 있고 넓을 수도 있습니다.

이러한 특성을 고려하여 다음과 같은 의미를 가지는 모델 함수를 찾고자 합니다.

p(y=1x;w)p(y=1|x;w)

위 표현은 파라미터 ww가 주어질 때 xx값이 변함에 따라 yy값이 11일 가능성이 어떻게 달라지는지를 나타냅니다. pp가 가지는 값의 범위는 010 \sim 1입니다. pp의 값이 0.50.5 이상이면 yy값이 11, 0.50.5 미만이면 yy값이 00이라고 판정합니다.

2.1. 첫번째 시도

다음과 같이 모델 함수가 xx의 1차식이라고 가정해 봅니다.

hw(x)=w0+w1x{ h }_{ w }(x)=w_0+w_1x

그러면 hw(x)h_w(x)가 가질 수 있는 값의 범위는 +-\infty \sim +\infty가 되어 010 \sim 1 범위의 값을 가지는 모델 함수가 될 수 없습니다.

2.2. 두번째 시도

xx의 일차식은 단조증가하거나 단조감소합니다. 따라서 좌변은 이러한 조건을 만족시키는 hw(x)h_w(x)의 함수식이어야 합니다. y=0y=0일 가능성 대비 y=1y=1일 가능성의 비율이 단조증가하므로 모델 함수를 다음과 같이 가정해 봅니다.

hw(x)1hw(x)=w0+w1x\frac {h_w(x)}{1 - h_w(x)}=w_0+w_1x

하지만 hw(x)h_w(x)010 \sim 1 사이의 값을 가질 때 좌변이 가질 수 있는 값의 범위는 0+0 \sim +\infty로 여전히 우변이 가질 수 있는 값의 범위와 일치하지 않습니다.

참고로 y=0y=0일 가능성 대비 y=1y=1일 가능성의 비율을 odds ratio라고 부릅니다.

odds(p)=p1p=odds(p) = \frac {p} {1-p} =\frac {성공할 \quad 가능성} {실패할 \quad 가능성}

2.3. 세번째 시도

값의 범위가 0+0 \sim +\infty일 때 로그를 적용하면 단조증가하면서 값의 범위가 +-\infty \sim +\infty로 확장됩니다. 그래서 이번에는 좌변에 로그를 적용해 봅니다.

log(hw(x)1hw(x))=w0+w1xlog(\frac {h_w(x)}{1 - h_w(x)})=w_0+w_1x

Odds ratio에 로그를 적용한 것을 로짓(logit) 함수라고 부릅니다.

이제 좌변과 우변 모두 동일한 값의 범위를 가지도록 하는 방법을 찾았습니다. 위 식을 hw(x)h_w(x)에 대하여 풀면 다음과 같습니다.

hw(x)=11+e(w0+w1x)h_w(x)=\frac {1} {1+{ e }^{ -(w_0 + w_1x) }}

x0=1x_0=1이라고 정의하면 위 수식은 다음과 같이 표현할 수 있습니다.

w=(w0,w1),x=(x0,x1)w=(w_0,w_1), \quad x=(x_0,x_1) w0x0+w1x1=wTx=z(x)w_0x_0 + w_1x_1 = w^Tx = z(x) hw(x)=11+ez(x)h_w(x)=\frac {1} {1+{ e }^{ -z(x) }}

이러한 형태의 함수를 로지스틱(logistic) 함수라고 합니다. 또한 그래프로 그려 보면 S자 모양과 비슷하여 시그모이드(sigmoid) 함수라고 부르기도 합니다. 아래 그래프들은 w0w_0w1w_1 값을 다르게 지정하여 그려 본 것입니다.

여기서 눈여겨 볼 것은 좌변에서 사용할 hw(x)h_w(x)의 함수식을 찾을 때 다음 두 가지를 만족시킬 수 있다면 logit 함수가 아니어도 된다는 사실입니다.

  • 단조증가 또는 단조감소
  • 값의 범위가 +-\infty \sim +\infty

3. 비용 함수 정의하기

선형 회귀에서와 같이 최소자승법을 사용하여 비용 함수를 정의하면 비볼록 함수가 되어 최솟값을 찾는 것이 어려워집니다.

J(w)=1mi=1m12(hw(x(i))y(i))2J(w)=\frac { 1 }{ m } \sum _{ i=1 }^{ m } \frac {1} {2} { (h_w(x^{(i)}) - y^{(i)})^2 }

그래서 볼록 함수가 되도록 비용 함수를 정의해 보고자 합니다.

J(w)=1mi=1mCost(hw(x(i)),y(i))J(w)=\frac { 1 }{ m } \sum _{ i=1 }^{ m }{ Cost(h_w(x^{(i)}), y^{(i)}) }

3.1. 첫번째 시도

개별 데이터에 대한 비용을 계산할 때 사용할 수식을 아래와 같이 정의하면 데이터 세트에 대한 비용 함수는 볼록한 형태가 됩니다.

Cost(hw(x(i)),y(i))=hw(x(i)),fory(i)=0Cost(h_{ w }(x^{ (i) }),y^{ (i) })=\quad \quad h_w(x^{(i)}), \quad for \quad y^{(i)}=0

Cost(hw(x(i)),y(i))=1hw(x(i)),fory(i)=1Cost(h_{ w }(x^{ (i) }),y^{ (i) })=1 - h_w(x^{(i)}), \quad for \quad y^{(i)}=1

이것을 하나의 식으로 표현하면 다음과 같습니다.

Cost(hw(x(i)),y(i))=(1y(i))hw(x(i))+y(i)(1hw(x(i))Cost(h_{ w }(x^{ (i) }),y^{ (i) })=(1-y^{(i)}) h_w(x^{(i)}) + y^{(i)}(1-h_w(x^{(i)})

위의 정의에 따르면 yy값이 00일 때 예측값이 11이 될 가능성이 00에 가까워지면 비용이 줄어들고, 11에 가까워지면 비용이 늘어나게 됩니다. 마찬가지로 yy값이 11일 때 예측값이 11이 될 가능성이 00에 가까워지면 비용이 늘어나고 11에 가까워지면 비용이 줄어듭니다. 따라서 비용 함수를 위와 같이 정의하는 것이 yy값과 모델 함수가 예측하는 값의 차이의 정도를 나타내기에 적절하다고 할 수 있습니다.

3.2. 두번째 시도

그런데 log를 사용하면 수학적으로 더 편리할뿐만 아니라 경사하강법 방식으로 최솟값을 찾을 때 더 빠른 속도로 최솟값에 접근하게 됩니다. 그래서 log를 사용해서 비용 함수를 다시 정의하면 다음과 같습니다.

Cost(hw(x(i)),y(i))=log(1hw(x(i))),fory(i)=0Cost(h_{ w }(x^{ (i) }),y^{ (i) }) = -log(1-h_w (x^{(i)})), \quad {for} \quad y^{(i)} = 0

Cost(hw(x(i)),y(i))=log(hw(x(i))),fory(i)=1Cost(h_{ w }(x^{ (i) }),y^{ (i) }) = \quad \quad -log(h_w (x^{(i)})), \quad {for} \quad y^{(i)} = 1

이것을 하나의 식으로 표현하면 다음과 같습니다.

Cost(hw(x(i)),y(i))=y(i)log(hw(x(i)))(1y(i))log(1hw(x(i))Cost(h_{ w }(x^{ (i) }),y^{ (i) })=-y^{(i)} log(h_w(x^{(i)})) - (1-y^{(i)})log(1-h_w(x^{(i)})

첫번째 시도에서 얻은 비용 함수와 비교해 보면 yy값이 00일 때 예측값이 11이 될 가능성이 11에 가까워지면 비용이 훨씬 더 가파르게 증가합니다. 경사하강법 방식에서는 경사가 심할수록 더 빠른 속도로 최솟값에 접근합니다.

이제 하나의 데이터 세트에 대한 비용 함수를 다음과 같이 표현할 수 있습니다.

J(w)=1mi=1m[y(i)log(hw(x(i)))(1y(i))log(1hw(x(i))]J(w)=\frac { 1 }{ m } \sum _{ i=1 }^{ m }{ \left[ -y^{(i)} log(h_w(x^{(i)})) - (1-y^{(i)})log(1-h_w(x^{(i)}) \right]}

4. 파라미터 찾기

4.1. 경사하강법

다음은 경사하강법 방식을 나타내는 알고리즘입니다.

repeat{wj:=wjαJ(w)wj} repeat \quad \{ \quad \quad \quad \quad \quad \quad \quad \quad \\ { w }_{ j }:={ w }_{ j }-\alpha \frac { \partial J(w) }{ \partial { w }_{ j } } \\ \} \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad

위의 식에서 α\alpha는 학습률(learning rate)입니다.

비용 함수 J(w)J(w)ww에 대한 편미분을 얻기 위하여 우선 다음과 같이 함수를 정의합니다.

L(w)=ylog(hw(x))(1y)log(1hw(x)) L(w) = -y log(h_{w}(x))-(1-y)log(1-h_{w}(x))

그리고 L(w)L(w)ww에 대한 편미분을 구합니다.

L(w)wj=y1hw(x)hw(x)wj+(1y)11hw(x)hw(x)wj=hw(x)wj(y1hw(x)+(1y)11hw(x)) \frac { \partial L(w) }{ \partial { w }_{ j } } = -y \frac {1}{h_{w}(x)} \frac { \partial h_{w}(x) }{ \partial { w }_{ j } } + (1-y) \frac {1}{1 - h_{w}(x)} \frac { \partial h_{w}(x) }{ \partial { w }_{ j } } \\ \quad = \frac { \partial h_{w}(x) }{ \partial { w }_{ j } }(-y \frac {1}{h_{w}(x)} + (1-y) \frac {1}{1-h_{w}(x)})

모델 함수 hw(x)h_w(x)ww에 대한 편미분 결과는 hw(x)h_w(x)로 나타낼 수 있습니다.

hw(x)wj=ewx(xj)(1+ewx)2=xj11+eex1+eex11+eex=xjhw(x)(1hw(x)) \frac { \partial h_{w}(x) }{ \partial { w }_{ j } } = - \frac {e^{-wx}(-x_j)}{(1 + e^{-wx})^2} \\ \quad \quad \quad \quad \quad \quad \quad \quad = x_j \frac {1}{1+e^{-ex}} \frac {1+e^{-ex} - 1}{1+e^{-ex}} \\ \quad \quad \quad \quad \quad \quad = x_j h_w(x) (1 - h_w(x))

이를 대입하여 L(w)L(w)ww에 대한 편미분 결과를 아래와 같이 정리할 수 있습니다.

L(w)wj=xj(y(1hw(x))+(1y)hw(x))=xj(hw(x)y) \frac { \partial L(w) }{ \partial { w }_{ j } } = x_j(-y(1-h_w(x))+(1-y)h_w(x)) \\ = x_j(h_w(x) - y)

따라서 비용 함수 J(w)J(w)ww에 대한 편미분 결과는 다음과 같이 표현됩니다.

J(w)wj=1mi=1mL(w)wj=1mi=1mxj(i)(hw(x(i))y(i))=1mxT(hw(x)y) \frac { \partial J(w) }{ \partial { w }_{ j } } = \frac { 1 }{ m } \sum _{ i=1 }^{ m } \frac {\partial L(w)}{\partial{w_j}} \\ \quad \quad \quad \quad \quad \quad \quad \quad \quad = \frac { 1 }{ m } \sum _{ i=1 }^{ m } {x_j}^{(i)} { \left( { h }_{ w }({ x }^{ (i) })-{ y }^{ (i) } \right) } \\ \quad \quad \quad \quad = \frac { 1 }{ m } x^T(h_w(x)-y)

4.2. 파이썬 코드

아래 링크는 실습을 위해 작성한 파이썬 노트북입니다.

이 문서의 1.1. 데이터 세트에서 제시한 두 종류의 데이터 세트에 대하여 각각 로지스틱 회귀를 적용하여 모델 함수 hw(x)h_w(x)의 파라미터 ww를 찾습니다.

0, w: [ 1. 1.], total_cost: 3.26021492096
100, w: [-2.6355604 0.42721842], total_cost: 0.381607976117
200, w: [-4.20800179 0.33990582], total_cost: 0.259597699813
300, w: [-5.11107361 0.44791876], total_cost: 0.189260375224
400, w: [-5.67752132 0.55875972], total_cost: 0.14696429209
500, w: [-6.12954266 0.60842371], total_cost: 0.136285798335
600, w: [-6.52973682 0.64520282], total_cost: 0.128206376451
700, w: [-6.89004447 0.67842379], total_cost: 0.121658132782
800, w: [-7.21891096 0.70882576], total_cost: 0.116203273473
900, w: [-7.52228277 0.7369322 ], total_cost: 0.111561580443
999, w: [-7.80178475 0.76287476], total_cost: 0.107581904528

0, w: [ 1. 1.], total_cost: 1.26021492096
100, w: [-1.28554202 0.32823582], total_cost: 0.305950256446
200, w: [-2.03450316 0.42156667], total_cost: 0.285936892902
300, w: [-2.3862255 0.46758369], total_cost: 0.281598132252
400, w: [-2.57198045 0.49243347], total_cost: 0.280395854669
500, w: [-2.67574608 0.50646611], total_cost: 0.280021810942
600, w: [-2.73543813 0.51458526], total_cost: 0.279898223002
700, w: [-2.77033872 0.51934772], total_cost: 0.279856010509
800, w: [-2.79093454 0.52216342], total_cost: 0.279841317035
900, w: [-2.80315452 0.52383585], total_cost: 0.279836145885
999, w: [-2.81037234 0.52482432], total_cost: 0.279834324659

경사하강법을 1000번 적용하여 얻은 ww는 다음과 같습니다.

Dataset-A

999, w: [-7.80178475 0.76287476], total_cost: 0.107581904528

Dataset-B

999, w: [-2.81037234 0.52482432], total_cost: 0.279834324659

다음은 위에서 찾은 ww를 사용하여 모델 함수 hw(x)h_w(x)의 그래프를 그린 것입니다.

5. 참고 자료

  1. The Sigmoid Function in Logistic Regression by Karl Rosaen
  2. What is a Logit Function and Why Use Logistic Regression? by KAREN GRACE-MARTIN

Written with StackEdit.

댓글 없음:

댓글 쓰기

Llama 3.2로 문장 생성 및 챗팅 완성 실습

Llama 3.2로 문장 생성 및 챗팅 완성 실습 Running Meta Llama on Linux 문서의 내용을 참고하여 Llama 3.2 1B 모델로 다음 두 가지 기능을 실습합니다. 문장 완성 챗팅 ...