[모두의 딥러닝] 8. 로지스틱 회귀(logistic regression), 시그모이드 함수(sigmoid function), 교차 엔트로피 함수(cross entropy function)

로지스틱 회귀(logistic regression)

- 입력 데이터를 기반으로 이진 분류를 수행하는 머신러닝 알고리즘

- 직선이 아닌 참(1)과 거짓(0) 사이를 구분하는 S자 형태의 선을 그어 주는 작업

 

 

 

로지스틱 회귀 예제

- 자격증 시험을 본 4명의 학생의 공부한 시간, 합격 여부 조사

- 독립 변수 : 공부한 시간 / 종속 변수 : 합격 여부

공부한 시간 2 4 6 8 10 12 14
합격 여부 불합격 불합격 불합격 합격 합격 합격 합격
# matplotlib 라이브러리 사용해서 그래프로 나타내기
import matplotlib.pyplot as plt

x = [2, 4, 6, 8, 10, 12, 14]
y = [0, 0, 0, 1, 1, 1, 1]

plt.scatter(x, y)
plt.xlabel('time')
plt.ylabel('pass')
plt.show()

 

 

 

시그모이드 함수(sigmoid function)

- 딥러닝에서 사용되는 활성화 함수 중 하나로, 입력 값을 0과 1 사이의 확률로 변환하는 함수

- S자 형태의 그래프

 

  • 시그모이드 함수를 이용해 로지스틱 회귀를 풀어나가는 공식

- a : 그래프의 경사도

: a값이 커지면 경사가 커지고 a값이 작아지면 경사가 작아짐

: a가 작아질수록 오차는 무한대로 커지지만, a가 커진다고 해서 오차가 없어지지는 않음

 

- b : 그래프의 좌우 이동

: b값이 크면 왼쪽으로 이동하고 b값이 작아지면 오른쪽으로 이동

: b값이 너무 크거나 작을 경우, 오차는 이차 함수 그래프와 유사한 형태로 나타남

 

  • 시그모이드 함수 오차 공식

- 경사 하강법 : a값과 b값을 구하는 방법

- 교차 엔트로피 오차 : 손실 함수 (선형 회귀에서는 평균 제곱 오차 사용)

 

 

 

교차 엔트로피 오차(cross entropy error)

- 로지스틱 회귀에서 사용하는 손실 함수 중 하나

- 예측이 타겟과 일치할 때 최소값을 갖고, 예측이 타겟과 다를수록 값이 증가

- x가 1일때는 y는 0이 되고, x가 0에 가까워질수록 y의 값은 점점 작아짐

 

 

 

텐서플로에서 실행하는 로지스틱 회귀 - 파이썬 코드로 구현

1. 환경 및 데이터 준비

import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

x = np.array([2, 4, 6, 8, 10, 12, 14])
y = np.array([0, 0, 0, 1, 1, 1, 1])

 

2. 모델 실행

- 활성화 함수 : 시그모이드 함수를 사용하려면 activation='sigmoid' 설정

model = Sequential()
model.add(Dense(1, input_dim=1, activation='sigmoid'))

- 손실 함수 : 교차 엔트로피 함수를 사용하려면 loss='binary_crossentropy' 설정

# 교차 엔트로피 오차 함수를 이용하기 위하여 'binary_crossentropy'로 설정 
model.compile(optimizer='sgd' ,loss='binary_crossentropy')

model.fit(x, y, epochs=5000)

 

 

3. 그래프로 확인

plt.scatter(x, y)
plt.plot(x, model.predict(x),'r')
plt.show()

 

4. 모델 테스트

# 임의의 학습시간을 집어넣어 합격 예상 확률 예측
hour = 7
prediction = model.predict([hour])

print("%.f시간을 공부할 경우, 합격 예상 확률은 %.01f%%입니다" % (hour, prediction * 100))
7시간을 공부할 경우, 합격 예상 확률은 59.6%입니다

 

 

 

'모두의 딥러닝 개정 3판'의 내용과 https://github.com/taehojo/deeplearning의 코드 참고