https://ko.wikipedia.org/wiki/%EC%84%A0%ED%98%95_%ED%9A%8C%EA%B7%80
์ ํํ๊ธฐ๋ ์์น ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก " ์์๋๋ ๊ฐ์ด 00์ด๋ค " ๋ผ๋ ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํ ์์ญ์ด๋ค.
์ ํํ๊ธฐ์์๋ ์์๊ฐ(์ถ์ ๋๋ ๊ฐ)์ด ์ ํ์ผ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๋ค.
์์ธก๊ฐ๋ฅํ ํจ์๋ฅผ ๋ง๋ค ๋ ์ ํ์ด๋ผ๋ฉด,
์ด๋ค ์ ํ์ ์์ธก๊ฐ๋ฅํ ํจ์๊ฐ
๋ชฉ์ ์ ๊ฑธ๋ง๋ ๊ฒฝํฅ์ฑ์ ๋ํ๋ด๋์ง๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒฝํฅ์ฑ์ ์ฐพ๊ธฐ ์ํด Cost Function , ์ฆ ์ค์ฐจ๊ฐ ์ ์ ๋ฐฉ์ ์(๊ฒฝํฅ์ฑ)์ ์ ์ ํ๋ค.
์์ธก ๋ ๊ฐ H(x) ์์ y ์ค์ ๊ฐ์ ๋บ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ ๊ณฑํ์ฌ "์ค์ฐจ์ ์ ๋" ์ค์นผ๋ผ๋ก ์นํํ๊ณ ํ๊ท ์ ๋ธ๋ค.
๊ทธ๋์ ๊ฒฐ๊ตญ ์ ํํ๊ท์ ๋ชฉ์ ์
์ฆ ์์ธก๊ฐ์ด ์ค์ฐจํจ์๋ฅผ ์๊ฒ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก "์ ์ "ํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
์ ํํ๊ท์ ๋ชฉํ๋ Wx+b ์ ์ ํํจ์๋ฅผ ๊ตฌํ๋๊ฒ์ด๋ค. w์ ๊ฐ์ ์๋์ ์๊ณผ ๋์ผํ๋ฐ ์ฌ๊ธฐ์ b0 ๊ฐ w์ด๋ค.
์ด๋ cor(x,y)/var(x) ๊ผด์ธ๋ฐ, x์ ๋ถ์ฐ ๋ณํ๋์ ๋ํ x,y ์ ๊ณต๋ถ์ฐ ๋ณํ๋์ ๊ฒฝํฅ์ฑ์ ๋ํ๋ธ๋ค.
์๋๋ ๊ตฌํ์๋ํ ์ฝ๋์ด๋ค.
import pandas as pd
import numpy as np
'''
reference : ๊ฐ๋จํ OLS ๊ตฌํ ์ฝ๋์
๋๋ค.
Cor(x,y)/Var(x) ์ ํํ๋ก ์ ํํ๊ท์ ๋ชฉ์ ์ธ ax+b ํจ์๋ฅผ ์ถ์ ํ๋ค.
'''
x = [2,5,8,6]
y = [80,62,80,99]
mx = np.mean(x)
my = np.mean(y)
### OLS(Ordinary Least Square)
###
###
divisor = sum([(i-mx)**2 for i in x])
def top(x,mx,y,my):
d = 0
for i in range(len(x)):
d += (x[i] - mx)*(y[i]-my)
return d
dividend = top(x,mx,y,my)
a = dividend / divisor
b = my - (mx*a)
print(f"๊ธฐ์ธ๊ธฐ = {a}, y์ ํธ = {b}")
๊ฒฐ๊ณผ๊ฐ์ ax+b ๋ฅผ ์ ์ถํด๋ผ ์ ์๋ ๊ธฐ์ธ๊ธฐ์ ์ ํธ์ด๋์จ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ๋ก ๊ฒฝํฅ์ฑ์ ๋ํ๋ด๋ ์ง์ ์ ํจ์๋ฅผ ๊ตฌํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๊ฒ์ผ๋ก ์์ธก์ ํ๋ค๋ฉด ์๋์ ๊ฐ๋ค.
import numpy as np
'''
reference : linear regression ์ ์ํ ax+b ํจ์ ๊ตฌํ๊ณผ ์์ธก ์ฝ๋์
๋๋ค.
'''
fake_a = 13
fake_b = 86
x = np.array([2,4,8,6])
y = np.array([81,93,91,97])
def predict(x):
return fake_a * x + fake_b
def real_predict(x):
return a * x + b
predict_result = []
for i in range(len(x)): ### ์์์ ๊ฐ์ผ๋ก ax+b ๋ฅผ ๋ง๋ค์ด ์์ธกํจ.
predict_result.append(predict(x[i]))
print(f"Fake ax+b ๊ณต๋ถ์๊ฐ ={x[i]}, ์ค์ ์ ์ = {y[i]}, ์์ธก์ ์ = {predict_result[i]}")
predict_result = []
for i in range(len(x)): ### ๋ฐ์ดํฐ ๊ธฐ๋ฐ cor(x,y)/var(x) x + b ๋ฅผ ๋ง๋ค์ด ์์ธกํจ.
predict_result.append(real_predict(x[i]))
print(f"Real ax+b ๊ณต๋ถ์๊ฐ ={x[i]}, ์ค์ ์ ์ = {y[i]}, ์์ธก์ ์ = {predict_result[i]}")
์๋ ์ต์์ ๊ณฑ๋ฒ(OLS) ๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ax+b ์ ํจ์๋ฅผ ์ถ์ ํ ๊ฒ์ด๋ค. ์๋๋ ๊ฒฝ์ฌํ๊ฐ๋ฒ(Gradient Decsent )๋ก ์ ํํ๊ท์์ ๊ตฌํํด๋ณด๊ฒ ๋ค.
'''
reference : linear regression ์ ํ์ฉ๋๋ ํจ์ ์ถ์ ๊ตฌํ์
๋๋ค.
'''
a = 0
b= 0
lr = 0.03
x = np.array([2,4,8,6]) #์์์ ๋ฐ์ดํฐ ์ค์
y = np.array([81,93,91,97])
epochs = 2001 # ๋ฐ์ดํฐ ๋ฐ๋ณต์ ํ์ต ํ์
n = len(x)
for i in range(epochs):
y_pred = a*x + b # ์ผ์ฐจ ๋ฐฉ์ ์
error = y - y_pred # ์ค์ฐจ๊ฐ ๊ณ์ฐ ( ์ค์ y ์ ์์ธกํ y ์ ์ฐจ์ด๊ฐ = error )
## ํธ๋ฏธ๋ถ
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(f"epoch = {i}, ๊ธฐ์ธ๊ธฐ = {a}, y์ ํธ = {b}")
y_pred = a*x+b
plt.scatter(x,y)
plt.plot(x, y_pred,'r')
plt.show()
๊ฒฐ๋ก : ์ ํํ๊ท๋ "๊ฐ์ ์์ธก" ํ๋ค. ์์ธก๊ฐ๊ณผ ์ค์ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ค์ด๋ ๋ฐฉํฅ์ผ๋ก "์ ์์ธก"ํ๋ ๊ฒฝํฅ์ฑ์ ๋ํ๋ธ๋ค. ๋ฐฉ์์ผ๋ก๋ OLS ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์ฌ์ฉํ ์์๋ค.
'AI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
AI_Basic) ์ญ์ ํ(Backpropagtaion) : ํ์ต๋ถํฐ ์ญ์ ํ๊ฐ ์ด๋์ ์ฌ์ฉ๋๋์ง๊น์ง ์ฝ๋์์ฃผ (1) | 2024.12.02 |
---|---|
AI_basic ) ์ญ์ ํ(BackPropagation) (0) | 2024.11.06 |
Learning Rate ( lr , ํ์ต๋ฅ ) (0) | 2020.10.29 |