로지스틱 회귀(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의 코드 참고
'AI > 모두의 딥러닝' 카테고리의 다른 글
[모두의 딥러닝] 10. 다층 퍼셉트론(multilayer perceptron), XOR 문제 해결 (0) | 2023.05.22 |
---|---|
[모두의 딥러닝] 9. 인공 신경망(artificial neural network, ANN), XOR 문제 (0) | 2023.05.22 |
[모두의 딥러닝] 7. 머신 러닝 용어, 텐서플로(tensorflow), 케라스(keras) API (0) | 2023.05.18 |
[모두의 딥러닝] 6. 다중 선형 회귀(multiple linear regression) (0) | 2023.05.18 |
[모두의 딥러닝] 5. 경사 하강법(gradient decent) (0) | 2023.05.16 |