[딥러닝 입문] 수치 예측
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
Author And Source
이 문제에 관하여([딥러닝 입문] 수치 예측), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vector13/딥러닝-입문-수치-예측저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)