-
4. 로지스틱 회귀(Logistic Regression)AI/딥러닝 2019. 7. 11. 17:45
이전 Linear Regression에서 다룬 성적 데이터를 Pass/Non-Pass처럼 Binary Classfication(이진 분류)로 변경해 보겠습니다.
성적 점수보단, 통과 혹은 불통 자체에 관심이 생겼습니다. 그래서 이를 분류해 보려고 합니다.
20, 44시간 공부한 학생들은 통과했고, 4, 12시간 공부한 학생들은 불합격 했습니다. 억지로 Linear Regresssion을 해볼까요
가설을 했지만, 영 좋지않은 그림이네요. 그렇다면 데이터를 하나 더 추가해볼까요, 200시간 공부해 통과한 학생입니다.
뭐 어떻게 선을 그어야할지 모르겠네요,,, 그렇다면 이런 형태는 어떨까요,
결괏값 y를 0~1 사이의 확률로 나타냈습니다. 0.5 이상의 확률이 되면 합격 처리하고, 0.5 이하의 확률은 불합격으로요.
기존 가설함수인 H(x) = WX + b에서, 시그모이드 함수를 적용하면
여기서 x가 가설 함수 H(X) 이런 형태의 함수가 됩니다. 그렇다면 Cost function은 어떻게 만들어야 할까요
Cost Function
기존 cost function은 예측값과 실제값의 차이를 계산했었습니다.
그림을 먼저 보겠습니다.
Y = 1(Pass)면, H(x)가 0에 가까울수록 Cost는 증가할 것이고, 1에 가까울수록 0에 수렴합니다.
Y = 0(Non-Pass)면, H(x)가 0에 가까울수록 Cost는 0에 수렴합니다.
이것을 수식으로 어떻게 표현할까요?
한 줄로 나타내면, Cost(H(x), y) = -y·log(H(x)) - (1-y)log(1-H(x)) 가 됩니다. y가 1이면 뒤의 항이 1-y때문에 소거되고, 0이면 앞의 항이 소거되어 위의 수식과 동일해졌습니다.
위 Cost함수도 Gradient Descent를 통해 Cost가 최저가 되는 값을 구할 수 있습니다.
코드
주요 코드만 정리하겠습니다.
hypothesis = tf.sigmoid(tf.matmul(X, W) + b) cost = -tf.reduce_mean(Y*tf.log(hypothesis + 1e-10) + (1-Y)*tf.log(1-hypothesis + 1e-10)) train = tf.train.GradientDescentOptimizer(learning_rate=1e-2).minimize(cost)
여기서 log안에 1e-10이라는 미세값을 추가했습니다. 그 이유는 log 0이 돼버리면 값이 무한대로 빠져 계산 자체가 되지 않았기 때문입니다.
다음엔 이진 분류를 넘어선 Multi class Classification을 다뤄보겠습니다.
반응형'AI > 딥러닝' 카테고리의 다른 글
6. 퍼셉트론(Perceptron) (2) 2019.07.12 5. Sotfmax, Cross Entropy (0) 2019.07.11 3. 다변량 선형 회귀(Multivariate Linear Regression) (0) 2019.07.11 2. 경사 하강법(Gradient Descent), Tensorflow 선형 회귀 구현 (0) 2019.07.09 1. 선형 회귀(Linear Regression) (2) 2019.07.08