import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#๊ณต๋ถ์๊ฐ X์ ์ฑ์ Y์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
data = [[2, 0], [4, 0], [6, 0], [8, 1], [10, 1], [12, 1], [14, 1]]
x_data = [i[0] for i in data] # ๊ณต๋ถ์๊ฐ
y_data = [i[1] for i in data] # ์ฑ์
#๊ทธ๋ํ๋ก ๋ํ๋ด ๋ด
๋๋ค.
plt.scatter(x_data, y_data)
plt.xlim(0, 15)
plt.ylim(-.1, 1.1)
# ๊ธฐ์ธ๊ธฐ a์ ์ ํธ b์ ๊ฐ์ ์ด๊ธฐํ ํฉ๋๋ค.
a = 0
b = 0
#ํ์ต๋ฅ ์ ์ ํฉ๋๋ค.(์์๋ก ์ ํจ)
lr = 0.05
#์๊ทธ๋ชจ์ด๋ ํจ์๋ฅผ ์ ์ํฉ๋๋ค.
def sigmoid(x):
return 1 / (1 + np.e ** (-x))
#๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์คํํฉ๋๋ค.
for i in range(2001):
for x_data, y_data in data:
a_diff = x_data*(sigmoid(a*x_data + b) - y_data) # a์ ๊ดํ ํธ๋ฏธ๋ถ, ์์จ ์ ์ํ sigmoid ํจ์ ์ฌ์ฉ
b_diff = sigmoid(a*x_data + b) - y_data # b์ ๊ดํ ํธ๋น๋ถ
a = a - lr * a_diff # a๋ฅผ ์
๋ฐ์ดํธ ํ๊ธฐ ์ํด, a_diff์ ํ์ต๋ฅ ์ lr์ ๊ณ ํฉ ๊ฐ์ a์์ ๋ป
b = b - lr * b_diff # b๋ฅผ ์
๋ฐ์ดํธ ํ๊ธฐ ์ํด, b_diff์ ํ์ต๋ฅ ์ lr์ ๊ณ ํฉ ๊ฐ์ b์์ ๋ป
if i % 1000 == 0: # 1000๋ฒ ๋ฐ๋ณต๋ ๋๋ง๋ค ๊ฐ x_data๊ฐ์ ๋ํ ํ์ฌ์ a๊ฐ, b๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
print("epoch=%.f, ๊ธฐ์ธ๊ธฐ=%.04f, ์ ํธ=%.04f" % (i, a, b))
# ์์ ๊ตฌํ ๊ธฐ์ธ๊ธฐ์ ์ ํธ์ ์ด์ฉํด ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค ๋ด
๋๋ค.
plt.scatter(x_data, y_data)
plt.xlim(0, 15)
plt.ylim(-.1, 1.1)
x_range = (np.arange(0, 15, 0.1)) #๊ทธ๋ํ๋ก ๋ํ๋ผ x๊ฐ์ ๋ฒ์๋ฅผ ์ ํฉ๋๋ค.
plt.plot(np.arange(0, 15, 0.1), np.array([sigmoid(a*x + b) for x in x_range]))
plt.show()
epoch=0, ๊ธฐ์ธ๊ธฐ=-0.0500, ์ ํธ=-0.0250
epoch=0, ๊ธฐ์ธ๊ธฐ=-0.1388, ์ ํธ=-0.0472
epoch=0, ๊ธฐ์ธ๊ธฐ=-0.2268, ์ ํธ=-0.0619
epoch=0, ๊ธฐ์ธ๊ธฐ=0.1201, ์ ํธ=-0.0185
epoch=0, ๊ธฐ์ธ๊ธฐ=0.2374, ์ ํธ=-0.0068
epoch=0, ๊ธฐ์ธ๊ธฐ=0.2705, ์ ํธ=-0.0040
epoch=0, ๊ธฐ์ธ๊ธฐ=0.2860, ์ ํธ=-0.0029
epoch=1000, ๊ธฐ์ธ๊ธฐ=1.4978, ์ ํธ=-9.9401
epoch=1000, ๊ธฐ์ธ๊ธฐ=1.4940, ์ ํธ=-9.9411
epoch=1000, ๊ธฐ์ธ๊ธฐ=1.4120, ์ ํธ=-9.9547
epoch=1000, ๊ธฐ์ธ๊ธฐ=1.4949, ์ ํธ=-9.9444
epoch=1000, ๊ธฐ์ธ๊ธฐ=1.4982, ์ ํธ=-9.9440
epoch=1000, ๊ธฐ์ธ๊ธฐ=1.4984, ์ ํธ=-9.9440
epoch=1000, ๊ธฐ์ธ๊ธฐ=1.4985, ์ ํธ=-9.9440
epoch=2000, ๊ธฐ์ธ๊ธฐ=1.9065, ์ ํธ=-12.9489
epoch=2000, ๊ธฐ์ธ๊ธฐ=1.9055, ์ ํธ=-12.9491
epoch=2000, ๊ธฐ์ธ๊ธฐ=1.8515, ์ ํธ=-12.9581
epoch=2000, ๊ธฐ์ธ๊ธฐ=1.9057, ์ ํธ=-12.9514
epoch=2000, ๊ธฐ์ธ๊ธฐ=1.9068, ์ ํธ=-12.9513
epoch=2000, ๊ธฐ์ธ๊ธฐ=1.9068, ์ ํธ=-12.9513
epoch=2000, ๊ธฐ์ธ๊ธฐ=1.9068, ์ ํธ=-12.9513
-๋ง์ฝ ์ฌ๊ธฐ์ ์
๋ ฅ ๊ฐ์ด ์ถ๊ฐ๋์ด ์ธ๊ฐ ์ด์์ ์
๋ ฅ ๊ฐ์ ๋ค๋ฃฌ๋ค๋ฉด, ์๊ทธ๋ชจ์ด๋ ํจ์๊ฐ ์๋๋ผ ์ํํธ๋งฅ์ค (softmax)๋ผ๋ ํจ์๋ฅผ ์จ์ผ ํ๋ค