로지스틱 회귀 : 참과 거짓, 둘 중 하나로 판단해야할 때 딥러닝에서 주어진 데이터를 놓고 쓰임.
예시 : 5장의 공부한 시간과 공부한 성적 사이를 선형회귀적으로 표현하는 문제가 아닌 시험 결과 여부가 합/불합격만 존재할경우
공부시간 | 2 | 4 | 6 | 8 | 10 | 12 | 14 |
합격여부 | 불 | 불 | 불 | 합 | 합 | 합 | 합 |
합격을 1, 불합격이 0일때 좌표 평면에 그리면 일정한 기울기를 가지는 일차 방정식이 아니기에 1.과 0으로 구분된 선을 그리기 어려움.
따라서 1과 0을 이어주는 S자 그래프 형태로 그려지게됨 -> 시그모이드 함수를 통해 로지스틱 회귀를 풀어낼 수 있음. 선형회귀에서 평균 제곱 오차 함수를 사용해 보정했다면, 로지스틱 회귀는 교차 엔트로피 오차 함수를 이용.
# 필요한 기본 라이브러리 세팅
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]) # 앞서 설명한 공부시간 X 배열 생성
y = np.array([0, 0, 0, 1, 1, 1, 1]) # 앞서 설명한 공부시간 X에 따른 합불여부 배열 생성
# 시그모이드 함수 사용을 위해 활성화 함수부분 'sigmoid' 설정
model = Sequential()
model.add(Dense(1, input_dim=1, activation='sigmoid'))
# 교차 엔트로피 오차 함수를 이용을 위해 'binary_crossentropy'로 설정
model.compile(optimizer='sgd', loss='binary_crossentropy')
model.fit(x, y, epochs=5000)
# 결과 시각화
plt.scatter(x, y)
plt.plot(x, model.predict(x), 'r')
plt.show()
# 임의의 학습 시간을 집어넣어 합불 여부 출력
hour = 5
prediction = model.predict([hour])
print("%.f시간을 공부할 경우, 합격 여부는 %.01f%%입니다." % (hour, prediction * 100))
앞서 5시간을 공부할 경우 합격확률을 알 수 있다.(불합에 가까움)
'통계데이터과학과 및 컴퓨터과학 독서' 카테고리의 다른 글
07. 딥러닝 10-12장 (0) | 2023.12.04 |
---|---|
06. 딥러닝 7-9장 (0) | 2023.11.27 |
04. 딥러닝 5장 (0) | 2023.11.13 |
03.딥러닝 3-4장 (0) | 2023.11.06 |
02. 딥러닝 2장 (0) | 2023.10.30 |