본문 바로가기
machine learning

[TENSORFLOW] Logistic regression Classification

by 유주원 2017. 4. 11.

Logistic regression은 Linear regression과는 다른 비용 함수와 다른 모델을 사용한다라는 차이점을 가지고 있다.

위의 두 가지 차이점을 제외하면 나머지는 Linear regression의 기능과 상당히 일치한다.

Logistic regression에서는 아래의 sigmoid 모델을 사용한다. 

linear regression에서는 모델 값의 범위가 -∞ ~ 까지 다양하게 나올 수가 있는 반면에 위의 sigmoid 모델은 0 또는 1로 수렴하는 결과를 가져온다.

분류 문제에서는 0 또는 1로 직관되어 있는 표현이 더 좋기 때문에 sigmoid가 분류 문제에서는 더 활용 빈도가 크다고 할 수 있다.

Logistic regression에서는 기존에 쓰던 MSE(mean square error) 등의 비용 함수가 아닌 아래의 비용 함수를 사용한다.

이러한 비용 함수를 우리는 cross entropy라고 부른다.

cross entropy는 두 개의 확률 분포의 차이를 계산하기 위한 용도로 많이 사용이 된다. 보통은 아래와 같은 식으로 표현이 되며,

얼핏 보기에는 위의 식과 처음 설명한 식이 달라 보이는데, 처음 설명한 식은 두 가지 경우 밖에 없기 때문에 이진 확률을 y와 1-y로 표현을 한 것이고 결국에는 모든 확률에 대해 시그마를 취한 아래의 식과 동일한 식이다.


이제 TensorFlow code를 살펴 보자. 우리는 Linear regression에서 봤던 비슷한 유형의 아래의 데이터 분포를 Logistic model로 나타낼 것이다.


-4의 평균과 2의 표준편차를 가지는 1000개의 숫자를 생성해서 x1에 저장하고, 4의 평균과 2의 표준편차를 가지는 1000개의 숫자를 생성해서 x2에 저장한 다음, 두 개의 리스트를 xs 변수에 합친다.

xs에 대한 label 값을 만들 것인데, 첫 번째 x1에 해당하는 label은 0으로 주고 두 번째 x2에 해당하는 label은 1로 준다.

y_model은 기존 w1x + w0의 선형 방정식에 sigmoid를 취한 모델을 생성한다.

cost 함수는 위에서 언급한 cross entropy 비용 함수를 적용하자.

나머지는 기존 linear regression과 동일하며 위의 코드에서는 early_stopping을 둬서 이전 에러와 현재 에러가 별 차이가 없을 경우에는 루프를 빠져나오게 처리했다.

마지막으로 최종 계산된 w_val을 이용해서 logistic regression을 그려보면 아래와 같이 나타난다.

이번에는 Logistic regression 모델이 정말로 유연한지에 대해서 한 번 실험해 볼 것이다.

현재의 데이터 분포에서 만약에 동떨어진 데이터 하나가 들어온다면 과연 어떻게 될까??

Linear regression과 Logistic regression 모델로 그려서 한 번 확인해 보자.

왼쪽은 Linear regression graph, 오른쪽은 Logistic regression graph이고 기존 데이터 분포에 20이란 데이터를 하나 추가해 주었다. Linear regression에서는 20이란 데이터가 들어옴과 동시에 해당 분류 모델이 깨짐을 알 수가 있다. 

반면 Logistic regression은 새로운 데이터에도 유연하게 모델이 적용됨을 확인할 수가 있다.