노는게 제일 좋습니다.

tensorflow 7 : Binary(Logistic) classification 본문

Python/통계 및 데이터관련

tensorflow 7 : Binary(Logistic) classification

노는게 제일 좋습니다. 2017. 1. 15. 23:55

1.

Binary 이진

Logistic 논리의

classification 분류

데이터를 받아서 0,1로 인코딩하는 방식이다.


2.

Linear Regression과 같은 방식으로 hypothesis를 세울 때 발생하는 문제

(1) 0보다 작거나 1보다 큰 값을 뱉어낼 수가 있다.

(2) hypothesis를 얼마나 기울여야 할지 알 수 없다.

즉, 기존과 같은 가설(hypothesis)을 기반으로 하되, 이를 압축해서 0과 1로 만들어줄 새로운 함수가 필요하다.


3.

H(x)=Wx+b=z라 하자. 그리고 다음과 같은 어떤 함수 g(z)에 대입하면 두 번째 줄과 같은 결과가 나온다.

** W의 윗첨자 T는 행렬에서의 transpose를 나타낸다.


이 함수 g(z)를 logistic function 또는 sigmoid function이라고 한다.

가로축을 z, 세로축을 g(z)라고 보면 된다.


출처 https://en.wikibooks.org/wiki/Artificial_Neural_Networks/Activation_Functions


이 sigmoid function이 우리의 새로운 가설 함수이다.



4.

Binary classification을 할 때에는 cost함수 또한 Linear Regression에 쓴 것과는 달라야 한다.

만약 리니어 리그레션에 쓴 cost함수를 그대로 쓰면 Gradient Descent 알고리즘을 사용했을 때 전체에서 가장 낮은 global minimun을 못찾고, local minimum만 찾아버리는 수도 있다.

(이것이 저번에 convex function에만 Gradient Descent를 써야한다고 했던 것과 같은 이야기이다.)


그래서 다음과 같은 새로운 cost 함수를 사용한다.


이게 왜 타당한지 값을 직접 넣어보며 살펴보자


위 그래프는 y=1인 경우에 사용하는 -log(H(x))의 그래프이다.

H(x)의 값을 정답(y값)인 1로 예측했다고 하자. 그 경우 함수 c의 값이 0이 된다. 즉, cost함수의 값이 최소가 되게 한다.

만약 H(x) 0으로 한 경우, 눈으로 볼 수 없을정도로 함수 c의 값이 올라간다. 즉, cost함수의 값이.. 극혐값이 된다.



위 그래프는 y=0인 경우에 사용하는 -log(1-H(x))의 그래프이다.

H(x)의 값을 정답(y값)인 0로 예측했다고 하자. 그 경우 함수 c의 값이 0이 된다. 즉, cost함수의 값이 최소가 되게 한다.


두 개의 그래프를 그려 눈으로 확인해본 결과, 위에 써놓은 cost함수는 타당하다.


c(H(x),y) 함수를 한 줄에 쓰면 다음과 같다.( 1,0을 넣으면 한 항이 사라지는 원리로 합쳐놓은 것이다. )


5.

드디어 하이라이트이다. Gradient decent algorithm을 어떻게 적용할까!!

텐서플로우에게 맡기기로 하자.. (미분할 줄 모른다...)

optimizer = tf.train.GradientDescentOptimizer(rate)
train = optimizer.minimize(cost)

Comments