logistic classification

 

Logistic (regression) classification

이번 포스팅에서는, Logistic (regression) classification에 대해 알아볼 것입니다.

(왜 중간에 (regression)이 있는지는 나중에 다룰게요!)

 

binary classification

우선 Logistic (regression) classification이 정확히 뭔지 알아보기 전에, 일단 Binary Classification이 뭐였는지 먼저 알아봅시다.

 

Binary Classification은 두개로 이루어진 값들을 분류하는 작업입니다.

가령 스팸메일 필터링을 한다고 했을 때는, 이 메일이 스팸인지 그냥 메일인지 확인해야 하겠죠?

이 때 이 메일을 스팸인지/그냥 메일인지 두 가지중 하나로 분류하는 작업을 바로 Binary Classification이라고 합니다.

 

0,1 encoding

그런데 이런 작업을 할 때, 어떤 메일이 스팸인지 / 그냥 메일인지 구분할 때 0과 1로 인코딩 작업을 거칩니다.

가령 스팸이면 1, 그냥 메일이면 0으로 두는 것이죠.

그런데 왜 이렇게 인코딩을 할까요?

 

왜 이러는지는 regression의 성질을 생각하면 조금 이해가 될 듯 합니다.

(우리가 배우는 모델은 classification 작업에 사용될 뿐이지, 엄연히 regression모델입니다!!!)

저번 시간까지 배웠던 linear regression의 결과값은 어떻게 나왔나요?

가령 성적을 예측하는 regression모델이라고 한다면, 예측한 점수를 결과값으로 내게 될 것입니다.

이렇듯, regression모델은 특정한 '값''예측'하는데 사용됩니다.

그렇기 때문에 이런 regression 모델로 분류를 진행하려면, 이런 class들을 (스팸인지 아닌지) '값'으로 설정해야 합니다.

스팸 메일은 1, 그냥 메일은 0.. 이렇게 말이죠.

그리고 그렇게 예측한 값이 1에 가깝다면 스팸메일이다! 라고 예측을 하고,

예측한 값이 0에 가깝다면 진짜 메일이다! 라고 예측을 하는 겁니다.

그냥 Linear regression을 쓰면 안되는 이유

그런데, 그럼 그냥 Linear regression 모델을 그냥 사용하면 안되는 걸까요?  안되니깐 다른 모델을 배우는거겠죠?

 

자, 위의 예시를 봅시다.

위의 그래프는 x축에 공부한 시간, y축에 pass / fail (1 / 0)이 그려진 그래프로,

공부한 시간 비례 시험에서 통과할지 실패할지 예측하는 모델을 그린 것입니다.

 

그럼 이것을 Linear regression모델로 짤 수도 있지 않을까요?

fail 과 pass를 나누는 직선 하나를 그린 뒤에,

그 직선의 y값이 0.5 이하이면 fail, 아니면 pass라고 하면 잘 작동할것 처럼 보이기도 합니다.

 

그런데, 저 오른쪽 끝부분 (아래에 50적혀있는) 의 동그라미를 봅시다. 

만약 어떤 학생이 정말 시험에서 너무 pass하고 싶어서 50시간이나 공부를 해서 pass를 받았다고 가정해 봅시다.

그러면 어떤 문제점이 발생하느냐 하면,

linear regression의 Hypothesis H(x) = WX + B 함수가 저 오른쪽의 동그라미도 감안하고 측정이 되므로,

저 동그라미가 없을때보다 직선이 조금 더 오른쪽 아래로 기울어지는 현상이 발생합니다.

그런데 이렇게 되면 원래는 pass였던 것들의 y값이 0.5 아래로 내려가버리면서 fail로 처리되는 문제가 발생하게 됩니다.

(위의 그래프에 그려진 파란 직선 두개 참고)

 

이렇듯, Binary classification (사실 classification 전체 다)를 수행하는 데 Linear Regression 모델은 적합하지 못합니다.

 

Linear Regression이 안되는 이유 - 2

Linear regression을 사용하기 애매한 이유가 또 있습니다.

Linear regression의 경우 Hypothesis 함수를 H(x) = Wx + b 로 정의합니다. 그쵸?

그런데 어차피 y값들 (class, 스팸인지 아닌지)는 0이거나 1이 된다는 것을 우리는 이미 알고 있습니다.

(0, 1 인코딩을 이미 했고, 그렇게 분류하는것이 binary classification의 목적이니까요.)

 

그런데 Linear regression의 H(x)는 1보다 엄청 큰 수를 결과값으로 뱉을 수도 있고, 0보다 엄청 작은 수를 결과값으로 뱉을 수 있습니다.

가령 H(x) = 100x 라는 hypothesis가 있다고 해봅시다.

우리의 목적은 데이터들을 0과 1 둘중 하나의 값으로 분류하는 것이 목적이므로,

1에 가까운 값은 1로 분류하고, 0에 가까운 값은 0으로 분류하게 될 것입니다.

그런데 H(x) = 100x가 되버리면 (대략적으로) x가 0.01 이상일때는 모두 1로, x가 0 이하일때는 모두 0으로 분류되게 됩니다.

이러면 어떤 문제점이 발생해 버리냐하면, x값에 너무 민감하게 반응하는 모델이 만들어지게 됩니다.

즉, 연산상으로는 매우 작은 값(0.01)만 바뀌어도 아예 분류 자체가 바뀌어버리게 되는 것입니다.

이는 아까 위에서 설명했던 문제와 겹치며 linear regression 모델을 classification을 하는 용도로 사용하기 힘들게 만듭니다.

 

Sigmoid 함수

이를 해결하기 위하여 나온 것이 바로 logistic function (sigmoid function 이라고도 한다) 입니다.

원래 linear하던 H(x) = wx + b를 0과 1 사이의 함수로 바꿔주는 함수입니다.

수식으로 나타낸다면, g(z) = 1 / (1+ e^-z) 가 됩니다.

 

이렇게 hypothesis에 sigmoid 함수를 씌워주면, 무슨 함수였던지간에 결과값이 모두 0과 1 사이로 나오는 함수를 만들어 줄 수 있습니다.

(왜 이런 값이 나오는지 수학적으로 설명하는 것은 나중에 부록 편에서 다루겠습니다.)

Logistic Hypothesis

그리고 이것을 Logistic regression의 Hypothesis로 나타낸다면 위와 같은 수식으로 나타내어 집니다.

(W T X 는 그냥 간단하게 W * X로 생각해 주시면 됩니다.

multi-variable의 경우에서도 사용할 수 있도록 만든 hypothesis인지라 저런 식이 들어갑니다.)

 

그리고 이렇게 H(x)의 값이 0과 1사이로 나오면, 사용하기에 매우 편리해 지게 됩니다.

위의 Hypothesis 함수로 regression을 한 결과값이 0.5이상인 경우엔 1로 분류하고, 0.5보다 작으면 0으로 분류하면 되는 것이죠.

(사실 아까 전에 0,1 encoding을 한 이유도 이것 때문입니다.)

 

*참고 : Logistic "Regression" 인 이유!

많은 분들이 왜 이 모델이 Regression 모델인지 헷갈려 하곤 합니다.

그러니까, Logistic regression은 사실 classification을 하는데 사용하는데, 왜 regression이라고 불리는가를 헷갈려 하는 것이죠.

 

하지만 Logistic regression모델은 결과값이 0과 1 사이로 한정되는 특성상 classification을 하는 데 사용되는 모델이긴 하지만, 결과값으로 특정한 "값"을 도출해내는 모델입니다.

가령, 성적을 예측하는 Linear regression은 점수 그 자체를 결과값으로 도출합니다. (10점, 30점, 60점 등등...)

그와 비슷하게 스팸 메일인지 아닌지를 분류하는 Logistic regression 모델은 0과 1 사이의 값 자체를 결과로 냅니다. (0, 0.2, 0.8 등등...)

그러니까, Logistic Regression은 입력값 x에 대해 0과 1로만 이루어진 y값에 최대한 가깝게 그려질 수 있는 함수를 만들어내는 모델인 것입니다.

그리고 결과값이 0.5보다 큰 (즉, 1에 가까운) 값들은 죄다 1로 분류해 버리는 것이고,

결과값이 0.5보다 작은 (즉, 0에 가까운) 값들은 죄다 0으로 분류해 버리는 것입니다.

 

그러니깐 그냥 이제부터 Logistic (regression) classification이 아니라

logistic regression모델이라고 부르겠습니다.

cost function for logistic

그런데, 이렇게 Hypothesis를 바꿔버리면 원래 쓰던 cost function은 사용하지 못합니다.

왜냐 하면, 원래 쓰던 Cost function을 여기다가도 적용해버리면 non-convex한 function이 나오게 되기 때문입니다.

(cost function이 convex function이어야 하는 이유는 2강 (https://cding.tistory.com/21) 에서 다뤘습니다!)

+ 왜 그렇게 되는지는 나중에 부록편에서 따로 더 설명하겠습니다.

 

그래서 logistic regression의 cost function은 따로 만들어 줘야 합니다.

logistic regression의 cost function은 다음과 같이 정의합니다 : 

y=1일때 c(H(x), y) = -log(H(x))

y=0일때 c(H(x), y) = -log(1 - H(x))

(단, 여기서 log는 상용로그가 아니라 자연상수 e를 밑으로 갖는 자연로그입니다.)

 

그런데 왜 cost function을 이렇게 정의했느냐를 제대로 설명하려면 엄청난 수학의 압박이 느껴지게 됩니다...

그러니 일단 지금은 직관적으로 왜 cost function을 이렇게 정의하는지만 알아봅시다.

 

 

 cost function 왜 이따구임??에 대한 직관적 설명

그냥 지금 간단하게 생각해 봅시다.

(위의 그래프들은 x축에 h(x)값, y축에 cost 값을 나타내는 그래프입니다!!)

일단 y=1인 경우, 즉 h(x) = 1인 경우엔 왜 cost function은 -log(H(x))가 될까요?

(왼쪽 그래프 참고)

h(x)값이 0에서 1으로 이동하면 cost 값은 ∞에서 0으로 점점 줄어들게 되는 것을 확인할 수 있습니다.

즉, h(x)가 정답인 1로 가면 갈수록 cost는 줄어들고, 오답인 0으로 가면 갈수록 cost가 늘어납니다.

이러면 우리가 원하는 합리적인 cost function이 완성된 것이겠죠?

 

반대로, y=0인 경우, 즉 h(x) = 0인 경우에 cost function이 -log(1-H(x)) 인 이유도 동일합니다.

h(x)값이 1에서 0으로 이동하면 cost 값은 ∞에서 0으로 점점 줄어들게 되는 것을 확인할 수 있습니다.

즉, 이번에는 h(x)가 정답인 0로 가면 갈수록 cost는 줄어들고, 오답인 1으로 가면 갈수록 cost가 늘어납니다.

 

그냥 이정도로만 이해해 주시고, 왜 cost function을 이렇게 설정했는지는 나중에 부록 편에서 다루겠습니다.

 

logistic - Cost function 최종판

그리고 위처럼 y=1일때와 y=0일때로 나누어도 좋겠지만,

직접 컴퓨터로 연산을 할 때는 간단한 수식으로 나타내는 것이 훨씬 좋겠죠?

그래서 나온 공식의 위의 파란 박스가 쳐진 수식입니다.

 

어려울것 하나 없습니다!

y=0일 때는 -y * log(H(x)) 부분이 0이 되면서 자연스럽게 -log(1 - H(x)) 라는 cost function이 나오게 되고,

y=1일 때는 (1-y) * log(1 - H(x)) 부분이 0이 되면서 자연스럽게 -log(H(x)) 라는 cost function이 나오게 됩니다.

 

그리고 컴퓨터로 연산을 할 때는 if문을 사용해서 y==1인 경우와 y==0인 경우로 나누지 않고,

그냥 위의 수식을 사용하게 될 것입니다.

 

Gradient Descent

(위의 ppt의 Gradient decent는 오타입니다...ㅎㅎ;)

 

Gradient descent는 그냥 다른 모델과 동일하게 cost(W)를 W에 대해 미분하는 것으로 적용하면 됩니다.

그리고 이를 tensorflow를 사용해서 코드로 적용할 때는 그냥 GradientDescentOptimizer(a) 로 적용하면 됩니다.

(실제 cost값을 미분하면 어떤 값이 나오는지는 그냥 설명하지 않겠습니다. 매우 불필요합니다. 부록에서도 설명 안할듯)

 

 

이렇게 Logistic regression에 대해서 알아봤습니다.

사실 이렇게만 설명해도 Logistic regression이 어떤 개념인지는 모두 이해하셨으리라 믿지만,

나중에 부록편에서 조금 더 수학적으로 접근해서 왜 cost function이 저렇게 나오는지 설명하겠습니다.

 

그럼 다음엔 softmax regression (multinomial classification)으로 찾아뵙겠습니다!

+ Recent posts