파이썬 배열을 사용하기 위해 numpy, 결과를 도표화하기 위해 matplotlib.pyplot 라이브러리를 사용한다.
import numpy as np
import matplotlib.pyplot as plt
x = np.array([0.0, 1.0, 2.0])
y = np.array([3.0, 3.5, 5.5])
plt.scatter(x, y)
plt.show()
실행 결과
w = 0 # 기울기
b = 0 # 절편
rate = 0.01 # 학습률
epochs = 1000 # 반복 횟수
n = float(len(x)) # 입력 데이터의 개수
# 경사하강법
for i in range(epochs):
predict = w * x + b # 예측값
dw = (2/n) * sum(x * (predict - y))
db = (2/n) * sum(predict - y)
w = w - rate * dw # 기울기 수정
b = b - rate * db # 절편 수정
# 경사하강법 과정 출력
if i % 100 == 0:
predict = w * x + b
plt.plot([min(x), max(x)], [min(predict), max(predict)])
# 기울기와 절편을 출력
print(w, b)
# 예측값을 만듬
predict = w * x + b
# 입력 데이터를 그래프 상에 찍음
plt.scatter(x, y)
# 예측값을 선 그래프로 그림
plt.plot([min(x), max(x)], [min(predict), max(predict)], color='red')
plt.show()
1.2532418085611319 2.745502230882486
실행 결과
해당 표에서 빨간 선이 최종 학습된 값이다. 좌표 사이에서 적절히 예측 값을 학습한 결과를 볼 수 있다.