728x90
๋ฐ์ํ
์ค์ฐจ์ ๋ฑํ์ ๋ฐ๋ผ ์ด์ฐจํจ์ ๊ทธ๋ํ๋ฅผ ๋ง๋๋ก ์ ์ ํ ํ์ต๋ฅ ์ ์ค์ ํด ๋ฏธ๋ถ ๊ฐ์ด 0์ธ ์ง์ ์ ๊ตฌํ๋ ๊ฒ.
์ต์์ ๊ณฑ๋ฒ์ ์ฐ์ง ์๊ณ ํ๊ท ์ ๊ณฑ์ค์ฐจ, ๊ฒฝ์ฌํ๊ฐ๋ฒ์ผ๋ก ์ํ๋ ๊ฐ ๊ตฌํ๊ธฐ ๊ฐ๋ฅ
- ํจ์์ ๊ธฐ์ธ๊ธฐa๋ฅผ ๊ธฐ์ธ๊ธฐ๊ฐ ๋ฎ์ ์ชฝ์ผ๋ก ๊ณ์ ์ด๋์์ผ ์ต์๊ฐ m์ ์ด๋ฅผ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
- ์ต์๊ฐ m์์์ ์๊ฐ๊ธฐ์ธ๊ธฐ , ๊ธฐ์ธ๊ธฐ๊ฐ 0 = ๋ฏธ๋ถ๊ฐ์ด 0์ธ ์ง์ ์ฐพ๊ธฐ
- ์ต์ ์ b, y์ ํธ ๊ตฌํ ๋๋ ์ฌ์ฉ
1. a1์์ ๋ฏธ๋ถ
2. ๊ตฌํ ๊ธฐ์ธ๊ธฐ์ ๋ฐ๋ ๋ฐฉํฅ(๊ธฐ์ธ๊ธฐ๊ฐ +๋ฉด ์์ ๋ฐฉํฅ)์ผ๋ก ์ผ๋ง๊ฐ ์ด๋์ํจ a2์์ ๋ฏธ๋ถ
3. ๋ฏธ๋ถ๊ฐ์ด 0์ด ๋์ฌ ๋๊น์ง ๋ฐ๋ณต
๊ธฐ์ธ๊ธฐ์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ด๋์ ๋๋ฌด ๋ฉ๋ฆฌ ์ด๋์ํค๋ฉด a๊ฐ์ด ์๋ก ์น์์๋ฒ๋ฆผ
ํ์ต๋ฅ - ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ ํด์ฃผ๋ ๊ฒ. ์ต์ ์ ํ์ต๋ฅ ์ ์ฐพ์์ผ ํ๋ค.
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๋ฆฌ์คํธ๋ฅผ numpy๋ฐฐ์ด๋ก ๋ฐ๊พธ๊ธฐ(์ธ๋ฑ์ค๋ฅผ ์ฃผ์ด ํ๋์ฉ ๋ถ๋ฌ์ ๊ณ์ฐํ๊ธฐ ์ํด)
xdata=np.array(x)
ydata=np.array(y)
#์ด๊ธฐํ
a=0
b=0
#ํ์ต๋ฅ ์ ํ๊ธฐ
lr=0.05
#๋ช๋ฒ ๋ฐ๋ณต๋ ์ง(0๋ถํฐ ์ธ๋ฏ๋ก +1ํด์ฃผ๊ธฐ)
epochs =2001
#๊ฒฝ์ฌํ๊ฐ๋ฒ
for i in range(epochs):
y_pred = a* xdata+b
error =ydata-y_pred #์ค์ฐจ
a_diff = -(1/len(xdata))* sum(xdata *(error)) #์ค์ฐจํจ์ a๋ก ๋ฏธ๋ถํ ๊ฐ
b_diff = -(1/len(xdata))* sum(ydata - y_pred) #์ค์ฐจํจ์ b๋ก ๋ฏธ๋ถํ ๊ฐ
a = a-lr *a_diff #ํ์ต๋ฅ ๊ณฑํด ๊ธฐ์กด a,b๊ฐ ์
๋ฐ์ดํธ
b = b-lr *b_diff
if i%100 ==0:
print("epoch=%.f, ๊ธฐ์ธ๊ธฐ=%.04f, ์ ํธ=%.04f" % (i,a,b)) #100๋ฒ ๋ฐ๋ณต๋ ๋๋ง๋ค ํ์ฌ a,b์ถ๋ ฅ
#์
๋ฐ์ดํธ๊ฐ์ผ๋ก ๊ทธ๋ํ ๋ค์๊ทธ๋ฆฌ๊ธฐ
y_pred = a* xdata +b
plt.scatter(x,y)
plt.plot([min(xdata),max(xdata)],[min(y_pred),max(y_pred)]
plt.show()
๋ฐ์ํ
'๋ฅ๋ฌ๋ > Today I learned :' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฅ๋ฌ๋] ๋ก์ง์คํฑ ํ๊ท(logistic regression) (0) | 2021.03.17 |
---|---|
[๋ฅ๋ฌ๋] ๋ค์ค ์ ํ ํ๊ท (Multiple linear regression) (0) | 2021.03.16 |
[๋ฅ๋ฌ๋] ์ค์ฐจ ํ๊ฐ๋ฒ : ํ๊ท ์ ๊ณฑ์ค์ฐจ Mean Squared Error (0) | 2021.03.15 |
[๋ฅ๋ฌ๋] ์ ํ ํ๊ท (0) | 2021.03.12 |
๋ฅ๋ฌ๋ ์คํ ์ค๋น (์์ ํ๊ฒฝ ๋ง๋ค๊ธฐ) (0) | 2021.03.10 |