Gradient Descent
๊ฒฝ์ฌ ํ๊ฐ๋ฒ (Gradient Descent)
ํ์ต๋ฅ (learning rate)
๊ฒฝ์ฌํ๊ฐ๋ฒ ์ฝ๋ฉ
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#๊ณต๋ถ์๊ฐ X์ ์ฑ์ Y์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
data = [[2, 81], [4, 93], [6, 91], [8, 97]]
x = [i[0] for i in data]
y = [i[1] for i in data]
#๊ทธ๋ํ๋ก ๋ํ๋ด ๋ด
๋๋ค.
plt.figure(figsize=(8,5))
plt.scatter(x, y)
plt.show()
# ๋ฆฌ์คํธ๋ก ๋์ด ์๋ x์ y๊ฐ์ ๋ํ์ด ๋ฐฐ์ด๋ก ๋ฐ๊พธ์ด ์ค๋๋ค.
# (์ธ๋ฑ์ค๋ฅผ ์ฃผ์ด ํ๋์ฉ ๋ถ๋ฌ์ ๊ณ์ฐ์ด ๊ฐ๋ฅํด ์ง๋๋ก ํ๊ธฐ ์ํจ์
๋๋ค.)
x_data = np.array(x)
y_data = np.array(y)
# ๊ธฐ์ธ๊ธฐ a์ ์ ํธ b์ ๊ฐ์ ์ด๊ธฐํ ํฉ๋๋ค.
a = 0
b = 0
#ํ์ต๋ฅ ์ ์ ํฉ๋๋ค.
lr = 0.03
#๋ช ๋ฒ ๋ฐ๋ณต๋ ์ง๋ฅผ ์ค์ ํฉ๋๋ค.
epochs = 2001
#๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์์ํฉ๋๋ค.
for i in range(epochs): # epoch ์ ๋งํผ ๋ฐ๋ณต
y_hat = a * x_data + b # y๋ฅผ ๊ตฌํ๋ ์์ ์ธ์๋๋ค (Hy)
error = y_data - y_hat # ์ค์ฐจ๋ฅผ ๊ตฌํ๋ ์์
๋๋ค.
a_diff = -(2/len(x_data)) * sum(x_data * (error)) # ์ค์ฐจํจ์๋ฅผ a๋ก ๋ฏธ๋ถํ ๊ฐ์
๋๋ค.
b_diff = -(2/len(x_data)) * sum(error) # ์ค์ฐจํจ์๋ฅผ b๋ก ๋ฏธ๋ถํ ๊ฐ์
๋๋ค.
a = a - lr * a_diff # ํ์ต๋ฅ ์ ๊ณฑํด ๊ธฐ์กด์ a๊ฐ์ ์
๋ฐ์ดํธํฉ๋๋ค.
b = b - lr * b_diff # ํ์ต๋ฅ ์ ๊ณฑํด ๊ธฐ์กด์ b๊ฐ์ ์
๋ฐ์ดํธํฉ๋๋ค.
if i % 100 == 0: # 100๋ฒ ๋ฐ๋ณต๋ ๋๋ง๋ค ํ์ฌ์ a๊ฐ, b๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
print("epoch=%.f, ๊ธฐ์ธ๊ธฐ=%.04f, ์ ํธ=%.04f" % (i, a, b))
# ์์ ๊ตฌํ ๊ธฐ์ธ๊ธฐ์ ์ ํธ์ ์ด์ฉํด ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค ๋ด
๋๋ค.
y_pred = a * x_data + b
plt.scatter(x, y)
plt.plot([min(x_data), max(x_data)], [min(y_pred), max(y_pred)])
plt.show()
๋ค์ค ์ ํ ํ๊ท


Last updated



