3. [머신러닝] Linear Regression Code 구현

김범수·2022년 6월 2일
0

머신러닝, 딥러닝

목록 보기
3/10

Simple Variable Linear Regression

  • Training Data 입력

https://blog.kakaocdn.net/dn/b2B8Ux/btqV35Z4gos/5Rf8aJeCnXpTaGMcju3vX1/img.png

입력 데이터(x)와 출력 데이터(t)를 numpy를 이용하여 행렬 형태로 입력합니다.

  • 가중치 W, 바이어스 b 초기화

https://blog.kakaocdn.net/dn/cpkFC8/btqWc9VbzCa/7FWj8xzKU3j4OiA6yv4zqK/img.png

Training Data의 입력(x)과 출력(t)의 특성을 나타내기 위한 가중치 W와 바이어스 b를 0과 1사이의 값으로 random 메서드를 이용하여 초기화합니다.

만약 입력 데이터가 multi-variable이라면 W와 b 또한 그에 맞춰 초기화해줍니다.

  • 손실함수 (loss func)

https://blog.kakaocdn.net/dn/dMea1e/btqWn1IVowy/Tm1koMl19kAXkt4AEkSaKK/img.png

https://blog.kakaocdn.net/dn/bseJp1/btqV8GsaoWj/FbBNUCkQEv0po9wKt5sCf0/img.png

Trainnig Data의 정답(t)과 입력(x)에 대한 대한 계산 값 y의 차이를 계산하는 손실 함수를 선언하는 부분입니다.

y = Wx + b 를 dot 메서드를 통해 행렬 연산을 수행하여 나타냅니다.

  • 수치미분 함수 (numerical_derivative)

https://blog.kakaocdn.net/dn/s0xDU/btqV2VpSYg0/KRye1Nc5JKPhPoyokIwKJk/img.png

W와 b의 편미분 값을 구하기 위한 1차 미분 함수입니다.

delta_x는 미분 연산을 하기 위한 증분 값을 나타내며, grad라는 입력 받는 x와 같은 크기의 0의 원소들로 초기화된 배열이 선언됩니다.

while문을 통하여 입력받은 f함수(loss_func)와 x(W or b)에 대해 미분 값을 구하는 과정이 수행되는데, 유의해야할 점으로 연산 과정 중 x[idx]의 값이 바뀌기 때문에 tmp_val이라는 변수에 원본 값을 저장하는 과정이 먼저 수행됩니다.

  • Utility 함수 (손실함수, 예측 함수)

https://blog.kakaocdn.net/dn/ZJhz7/btqWsH4uWko/nYPFfPwiQ5wPKoOYQg2Vkk/img.png

Training 과정에서 error 값을 error_val(손실 함수)를 통해 체크하게 됩니다.

또한 Training 후 임의의 데이터로 예측을 수행할 시 사용하게 됩니다.

  • 학습률 초기화 및 손실함수가 최소가 될 때까지 W, b 업데이트

https://blog.kakaocdn.net/dn/dbwqRA/btqWxger2x6/BuL7nmPWdeYqLvTkyV40u0/img.png

학습률은 10^(-2)으로 정의하고 lambda를 통해 f를 loss_func으로 정의합니다.

이후 반복문을 통해 가중치 W와 바이어스 b를 업데이트하며 손실함수가 최소를 구하는 과정을 진행합니다.

https://blog.kakaocdn.net/dn/c9NAoi/btqV8GeE6TH/RIFeo3yuzHSExKLd1i04Yk/img.png

출력 값을 확인해보면 랜덤으로 설정된 W, b에 대해 에러값이 12.45가 나타났으나 400번 마다 업데이트하여 확인해보니 8000번째에는 W=1, b=1이며 에러값은 1.39로 감소함을 확인할 수 있었습니다.Training 데이터를 통해  y = x + 1이라는 수식을 얻게되었습니다.

https://blog.kakaocdn.net/dn/chue6j/btqV36SjE3t/BQtgS4gBA9UttFrYv8UVq1/img.png

추가로 입력 데이터에는 없는 임의의 데이터를 통해 미래값을 확인해보니 Training을 통해 얻은 y = x + 1이라는 수식을 통해 정확하게 31이 출력됨을 확인할 수 있었습니다.

출처 : 유튜브 NeoWizard 채널 머신러닝/딥러닝 강의

profile
iOS Developer

0개의 댓글