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

김범수·2022년 6월 2일
0

머신러닝, 딥러닝

목록 보기
3/10

Simple Variable Linear Regression

  • Training Data 입력

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

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

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

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

  • 손실함수 (loss func)

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

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

  • 수치미분 함수 (numerical_derivative)

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

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

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

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

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

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

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

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

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

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

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

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

profile
iOS Developer

0개의 댓글