[TensorFlow] Lab-05-1 Logistic Regression 모두의 딥러닝 시즌 2 정리...
다음과 같은 그림이 있다고 하자.
Logistic Regression 분류 기법 중의 하나로 동그라미, 세모와 같이 서로 다른 특징을 갖는 두 객체가 있을 때 이와 같은 도형들을 서로 분류하는데 사용하는 알고리즘이다.
What is Logistic Regression?
Classification
What is Binary(Multi-class) Classification?
variable is either 0 or 1 ( 0:positive / 1:negative)
먼저 classification 에 대해 알아보자. 다음과 같은 예시들이 있다.
시험의 경우 합격, 불합격 / 메일의 경우 정상 메일, 스팸 메일 / 얼굴 인식의 경우 실제 사람, 사람 얼굴 사진
이러한 예시들은 0, 1이라는 두 가지 값으로 나뉘는 것이 가능하고 이러한 예시들을 Binary Classification이라고 한다.
To start with machine learning, you must encode variable [0, 1]
Binary Classification은 반드시 두 가지 값으로 나뉘어야한다.
다음과 같은 학습 데이터(x_train)를 통해 두 가지 값으로 나뉠 수 있고(y_train) 이를 기반으로 Logistic Regression 모델을 만들 수 있다.
위의 y_train처럼 결과 값을 true, false or 1, 0으로 정의하는 기법은 one-hot encoding이라고 하는데 해당 개념은 추후 따로 정리하겠습니다.
Logistic vs Linear
What is the difference between logistic and linear?
데이터 관점에서 linear과 logistic의 차이는 무엇일까?
일단 logistic regression을 적용하기 위한 데이터의 경우에는 위의 그림처럼 두 가지 케이스를 구분선으로 구분할 수 있는 데이터들이 라고 할 수 있다. 위와 같은 데이터들은 셀 수 있고 흩어져 있다.
이에 반해 linear regression의 경우에는 데이터들이 그림처럼 연속적이다. 즉, 새로운 데이터가 오더라도 인근의 데이터들과 이어질 수 있다는 것을 예측할 수 있다.
간단한 예시로 logistic regression은 신발 사이즈(발 사이즈가 아닌 신발 사이즈...255, 260, 265....), 대기업 사원 수와 같이 데이터들이 셀 수 있고 구분이 가능하다.
그에 반해 linear regression을 적용하기 위한 데이터들은 시간, 몸무게, 키와 같은 연속적이고 다양한 값들이 수치형으로 나타날 수 있다.
아래의 코드를 보고 직접 생각하고 이해하기 바란다.
How to solve?
Hypothesis Representation
위에서 logistic regression을 어떤 데이터에 적용하는지에 설명하였다. 그렇다면 그 데이터를 바탕으로 우리가 어떤 가설을 통해 표현할 수 있는지에 대해 설명하겠다.
위의 예제에서 시험의 경우 합격, 불합격 두 케이스로 나뉜다고 말했었다.
이제 이걸 그래프로 나타내면 x축은 Study Hour, y축은 합격 여부라고 했을 때 공부한 시간이 길수록 합격을 하는 것을 볼수 있다.
이 그래프에 linear regression을 적용하면 점선처럼 수치 형에 대한 데이터가 나오게 된다. 이와 같은 경우 x값인 시간을 대입하고 특정 \(θ^T\)(세타를 weight라고 할 수 있다.)값을 곱하면 linear regression에서는 연속적인 수치값이 나오게 된다.
그런데 우리가 원하는 것은 이런 연속적인 값이 아니라 0, 1로 구분해내는 즉, binary classification에 대한 결과값이 필요하게 된다.
그렇다면 0, 1 or true, false와 같은 경우로 표현될 수 있는 그래프는 아래의 그래프와 같이 표현될 수 있을 것이다.
위의 그래프는 X, Y를 토대로 나온 우리의 모델. 즉, hypothesis라고 할 수 있는데 기존의 linear regression의 함수인
\(θ^T\)X 같은 경우 직선으로 표현이 됐지만 g( ) 을 통해서 \(θ^T\)X직선이 위의 그래프처럼 구부러지게 되는 우리가 필요로 하는 함수를 만들 수 있게 된다.
즉, 우리가 X를 넣었을 때 θ^T(weight라고 볼 수 있다.) 를 곱해서 나온 값으로 linear한 값이 나오는데
이 linear한 값을 Logistic function을 통해서 0과 1의 구간(0 <= y <= 1)으로 표현해낼 수 있고 이것을 특정 Decision Boundary를 통해서 0, 1인 결과 값으로 출력해 낼 수 있는 것이 우리가 원하는 hypothesis라고 할 수 있다.
Sigmoid (Logistic) function
g(z) function out value is between 0 and 1
이제 위에서 말한 g function에 대한 자세한 얘기를 하고자 한다.
앞의 설명에서 X는 linear function을 통해서 수치형 값이 나온다고 하였다.
그리고 이 수치형 값(실수 값)을 Logistic function(이 function이 g function이다.) 즉 g function (1/(1 + \(e^{-z}\)) =>sigmoid function) 을 통해서 이 수치형 값이 결국은 우리가 원하는 0, 1로 결과가 도출되는 것이다.
sigmoid function인 1/(1 + \(e^{-z}\))에 대한 간단한 설명
1/(1 + \(e^{-z}\))을 보면 exponential function(지수 z)이 있다. \(e^{x}\)는 보통 밑의 그래프처럼 나타내는데 -x이므로 왼쪽의 그래프로 나타나게 된다.
1/(1 + \(e^{-z}\))에서 z가 점점 커지면 \(e^{-z}\)는 0에 수렴하므로 1/(1+0)이므로 1로 점점 수렴하게 된다. 그에 반해 z가 점점 작아지면 \(e^{-z}\)는 ∞이므로 1/(1 + ∞)는 0에 수렴하게 된다.
tensorFlow에서의 sigmoid 작성법은 아래와 같다.수식으로 나타낸 것은 1/(1 + \(e^{-z}\))을 그대로 옮긴 것이다.
Decision Boundary
Linear / Non-Linear decision boundary
위에서 확인한 sigmoid function을 좀 더 자세히 살펴보면 함수 자체가 구부러지는 값으로 표현되는 것을 확인할 수 있다. 이 경우엔 우리가 원하는 0, 1로 딱 떨어지는 값으로 표현되기 힘든 부분이 보인다.
이를 해결하기 위해 sigmoid function을 통해 도출된 0 <= y =< 1 인 값들을 Decision Boundary를 통해 이 Boundary를 기준으로 해당 값보다 크면 1, 작으면 0으로 구분할 필요가 있다.
위의 그림에서 \(x_{1}\)+\(x_{2}\) >= 3인 부분을 기준으로 ▲, ■을 구분하고 있다.
또 다른 예시에선 \(x_{1}^{2}\)+\(x_{2}^{2}\)=1 을 기준으로 ▲, ■ 을 구분하고 있는 것을 확인할 수 있다.
이를 TensorFlow 코드에서는 아래와 같이 표현된다.
위에서 말했다시피 0.5를 기준으로 Logistic function에서 나온 값(즉, hypothesis)을 출력하면 결과 값으로 0, 1로 출력이 가능하다.
결과적으로 우리는 Logistic function을 통해 도출된 실수 값들을 Decision Boundary를 통해 0, 1로 표현이 가능하다