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))