뉴런 생성 by Class
from sklearn.datasets import load_diabetes
import matplotlib.pyplot as plt
diabetes = load_diabetes()
x = diabetes.data[:,2]
y = diabetes.target
class Neuron:
def __init__(self):
self.w = 1.0
self.b = 1.0
def forpass(self,x):
y_hat = x * self.w + self.b
return y_hat
def backprop(self, x, err):
w_grad = x *err
b_grad = 1 *err
return w_grad, b_grad
def fit(self, x, y, epochs=100):
for i in range(epochs):
for x_i, y_i in zip(x,y):
y_hat = self.forpass(x_i)
err = -(y_i - y_hat)
w_grad, b_grad = self.backprop(x_i , err)
self.w -= w_grad
self.b -= b_grad
neuron = Neuron()
neuron.fit(x,y)
plt.scatter(x,y)
pt1 = (-0.1, -0.1 * neuron.w + neuron.b)
pt2 = (0.15, 0.15 * neuron.w + neuron.b)
plt.plot([pt1[0],pt2[0]],[pt1[1],pt2[1]])
plt.show()
시그모이드 함수
- 간단하면서 강력한 수학적 도구
- 머신러닝이나 통계학에 많이 적용
보통 input 값으로 0~1 사이의 값을 넣으면,
f(x) = 1 / (1 + e^(-x)) 의 식을 가지는 함수이다.
S-shaped curve의 형태를 가지며,
input이 커지면 output이 1에 가까워지고
input이 작아지면 output은 0에 가까워진다
선형 회귀에서 시그모이드 함수는 한 개 이상의 input 변수들에 대해서 이진 결과의 확률을 계산하기 위해서 (true, false) 사용된다.
다른 특징은 시그모이드 함수는 미분이 가능한데, 함수의 차분을 계산하는데 필요한 최적의 알고리즘을 사용될 수 있다.
예시)
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
probs = np.arange(0,1,0.01)
odds = [p/(1-p) for p in probs]
plt.plot(probs,odds)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
probs = np.arange(0.001,0.999,0.001)
logit = [np.log(p/(1-p)) for p in probs]
plt.plot(probs, logit)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
zs = np.arange(-10., 10., 0.1)
gs = [1/(1+np.exp(-z)) for z in zs]
plt.plot(zs, gs)
plt.show()
728x90
'CS(Computer Science) > 인공지능' 카테고리의 다른 글
7. 단일층 신경망 (0) | 2023.03.19 |
---|---|
6. 로지스틱 회귀 (0) | 2023.03.19 |
4. 경사하강법 (0) | 2023.03.18 |
3. 선형 회귀 (0) | 2023.03.18 |
2. 딥러닝을 위한 도구 (0) | 2023.03.18 |