기록하기

선형회귀, 로지스틱회귀! 본문

AI 수업

선형회귀, 로지스틱회귀!

_parkdaxun 2023. 3. 24. 10:18

3주차 과제! 선형회기, 로지스틱회귀 Tensorflow로 하는 방법 테크 블로그 작성하기

 

 

선형회귀란?

알려진 다른 관련 데이터 값을 사용하여 알 수 없는 데이터의 값을 예측하는 데이터 분석 기법

 

선형회귀 모델 실습

import numpy as np
import matplotlib.pyplot as plt

x = np.array([2, 4, 6, 8])
y = np.array([81, 93, 91, 97])

plt.sccatter(x, y)
plt.show()

a = 0
b = 0

lr = 0.03

epochs = 2001

n = len(x)

for i in range(epochs):
  y_pred = a * x + b;
  error = y - y_pred

  a_diff = (2/n) * sum(-x * (error))
  b_diff = (2/n) * sum(-(error))

  a = a - lr * a_diff
  b = b - lr * b_diff

  if i % 100 == 0:
    print("eoich=%.f, 기울기=%.04f, 절편=%.04f", %(i, a, b))

y_pred = a * x + b

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

 

코드 설명

 

공부 시간 X와 성적 y의 넘파이 배열 만들기

x = np.array([2, 4, 6, 8])
y = np.array([81, 93, 91, 97])

 

데이터의 분포를 그래프로 나타내고 기울기 a 값과 절편 b의 값을 초기화 하기

plt.sccatter(x, y)
plt.show()

a = 0
b = 0

 

학습률 정리하고 몇 번 반복될지 설정 후 x 값이 총 몇 개인지 세기

lr = 0.03

epochs = 2001

n = len(x)

 

경사 하강법 시작하기

for i in range(epochs): # 에포크 수만큼 반복하기
  y_pred = a * x + b; # 예측 값을 구하는 식
  error = y - y_pred # 실제 값과 비교한 오차를 errorafh 놓기

  a_diff = (2/n) * sum(-x * (error)) # 오차 함수를 a로 편미분한 값
  b_diff = (2/n) * sum(-(error)) # 오차 함수를 b로 편미분한 값

  a = a - lr * a_diff # 학습률을 곱해 기존의 a값을 업데이트하기
  b = b - lr * b_diff # 학습률을 곱해 기존의 b값을 업데이트하기

  if i % 100 == 0: # 100번 반복될 때마다 현재의 a값, b값을 출력하기
    print("eoich=%.f, 기울기=%.04f, 절편=%.04f", %(i, a, b))

 

 

최종 a 값을 기울기, b 값을 y 절편에 대입하여 그래프 그리고, 그래프 출력하기

y_pred = a * x + b

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

 

로지스틱회귀란?

이벤트가 발생할 확률을 결정하는 데 사용되는 통계 모델

 

 

로지스틱회귀 실습하기

import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.model 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])

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

# 교차 엔트로피 오차 함수를 이용하기 위해 'binary_crossentropy'로 설정하기
model.complie(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 = 7
prediction = model.predict([hour])
print("%.f시간을 공부할 경우, 합격 예쌍 확률은 %.01f%%입니다." %(hour, prediction * 100))