선형회귀를 위한 뉴런은 앞서 이야기 한 부분을 클래스 만들어 정리 하는 것이다. 초기에 알고리즘을 만들고 나면 클래스 형태로 정리 해야만, 나중에 큰 프로젝트 할때 유리 하다.
선형 회귀는 정방향 계산에서 부터 시작 이 된다.
$ y = w * x +b $
파이썬에서 함수를 사용할때 def를 써야 하는데, def__init__(self)는 변수 초기화 할때 사용한다. 그리고 나머지는 사용자 함수로서 사용한다.
1) 정방향 (forpass) 계산
class만들 때는 self가 반드시 들어 간다 self는 현재의 인스턴스 객체를 가르키는 기능으로 쉽게 풀어 이야기 하면 self의 사전적 의미는 그대로 자기 자신을 이야기 한다. self라는 지시어는 이름공간(namespace)와 관련 있다. 주의점은 클래스 내에서 함수가 정의 될때, 첫번째 매개변수는 self 이어야 한다.
2) 역방향(backpropagation) 계산
선형회귀에 대한 손실함수는 앞에서 증명 하였다. 손실함수의 증명된 결과는 아래와 같다.
$ { \partial SL \over \partial w } = -(y - \hat{y})x $
$ { \partial SL \over \partial b } = -(y - \hat{y}) $
w_grade = x * err
b_grade = 1 * err
위 그림은 가중치 및 절편에 대한 경사하강법(gradient descent) 계산 하는 것이다. 위에 있는 가중치와 절편의 손실값을 계산 하여, 새로운 가중치와 절편을 만드는 것이다. 이렇게 계속 계산 하다 보면, 손실값이 가장 적은 시점이 오게 되는데, 그때가 우리가 이야기하는 최적화 된 값이 나오게 된다.
3) 훈련을 위한 fit 구하기
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.backporp(x_i, err)
self.w -= w_grade
self.b -= b_grade
Neuron 이라는 클래스에 초기화 함수 정방향 함수, 역방향 함수, 모델 fitting화 하는 함수인 fit 함수가 있다. 이를 실행 하는 방법은 아주 간단하다.
첫번째 클래스 객체를 활성화 시킨다.
neuron = Neuron()
두번째 객체 에서 x와 y값을 넣고 활성화 한다.
neuron.fit(x, y)
세번째 가중치와 절편을 본다.
print(neuron. w, neron.b)
4) 학습 완료된 가중치와 절편 확인 하기
neuron.w(가중치), neuron.b(절편)
plt1 = (-0.1, -0.1 * neuron.w + neuron.b)
plt2 = (0.15, 0.15 * neuron.w + neuron.b
plt.plot([pt1[0], pt2[0]], [pt1[1], pt2[1]])
plt.xlabel(‘x’)
plt.ylablel(‘y’)
plt.show()
경사 하강법을 적용 하여, 회귀 분석 알고리즘을 완성 하였다. 자세한 소스코드는 아래를 클릭 하면 된다.
※ 참고서적 : 정직하게 코딩하며 배우는 딥러닝 입문 (이지스퍼블리싱)
댓글 없음:
댓글 쓰기