[딥러닝 입문] 수치 예측

do it! 딥러닝 입문 강의 들으며 필기용..

선형 회귀


데이터 직접 만들지 않고 사이킷런이나 텐서플로우 같은 머신러닝 라이브러리의 예제 데이터 이용

diabetes의 data와 target 모두 넘파이 배열이다.
(442,10)의 경우 442개 샘플과 10개의 특성이 있다고 말함.

from sklearn.datasets import load_diabetes
diabetes = load_diabetes() 

print(diabetes.data.shape, diabetes.target.shape) 

당뇨 환자의 키, 몸무게, 혈압, 혈당 ,, 등등 10개의 특성으로 이루어져있음.
샘플을 행 방향에 넣고 특성을 열 방향에 넣는 것이 일반적

슬라이싱 이용해서 데이터 자세히 볼 수 있음
예) diabetes.data[0:3] : 3개의 샘플이 출력된다.
도메인 지식이 필요하다.

데이터 시각화는 matplotlib.pyplot 이용해서 산점도 그릴 수 있음.

경사 하강법으로 학습하는 방법

여러 에포크를 반복하기 하면 경사 하강법으로 선형 회귀 모델을 찾을 수 있다.

즉,
타깃과 예측값을 찾기 위해서 최적의 가중치 w와 절편 b을 찾는다.
경사 하강법의 기본적 방법은 무작위로 모델 만들고(무작위로 w와 b 정하기) 무작위 예측. hat(y)와 진짜y를 비교한다. (매칭) hat(y)이 y와 더 가까워지도록 w,b를 조정. 모든 샘플 처리할 때까지 반복

손실 함수와 경사하강법의 관계


손실 함수는 예측 값과 실제 타깃값의 차이를 측정한다. 손실 함수의 차이를 줄이는 법으로 '경사 하강법' 사용.
대표적인 회귀, 분류 등에 널리 사용하는 손실 함수가 있다. (비용함수) 일반적으로 연구자아닌 경우에는 이미 정립되어있는 손실 함수 사용한다. (복잡한 연구 경우 만들어 사용)

손실 함수 기울기 찾기위해서 SE를 w에 대해 편미분한다. SE = (y-hat(y))^2

미분 결과를 가중치에서 빼면 손실함수의 낮은 쪽으로 이동 w+(y -hat(y))x

절편에 대해 미분하고 업데이트 b+(y-hat(y))

선형 회귀를 위한 뉴런 만들기 (Neuron 클래스 만들기)


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          # 절편 업데이트
  • forpass 메소드 이용해서 정방향 계산 만들기 : 오차 계산 위해 hat(y) = w*x + b
    정방향 계산 이용해 계산된 hat(y) 가지고 오차 계산해서 w 변경 위해 역방향 계산
  • backprop 메소드 이용해서 역방향 계산 만들기 :
  • fit메소드 이용해 훈련, self와 입력 x, 타깃 y, 에포크(반복횟수)를 매개변수로 호출

에포크 만큼 훈련한 뉴런을 plot 이용해서 산점도 확인


교재 실습 코드 (3장)
https://github.com/rickiepark/do-it-dl/blob/master/Ch03.ipynb

좋은 웹페이지 즐겨찾기