7-5 초보자를 위한 선형회귀문제 해설

in #kr5 years ago (edited)

Linear regression 선형회귀법 유형의 머신 러닝 코드를 다루기 위한 전초 작업으로서 Linear regression에서 다루게 될 리스트 데이터를 설정해서 워밍업을 해보자.

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

y_data 와 x_data 사이의 함수관계가 y=2x 라는 점은 누구라도 알 수 있다. 혹 알 수 없다면 y=ax+b 라고 가정을 한 상태에서 점의 좌표를 대입헤 보면 쉽게 a 와 b 값을 알아낼 수 있다. 하지만 컴퓨터에게 이런 수학을 공자왈 맹자왈 가르칠 수는 없는 노릇이고 보면 컴퓨터가 이런 문제를 풀 수 있는 좋은 방법은 없을까?

noname02.png

그 방법이 바로 지도학습(supervised learnig)에 의한 머신 러닝이다. 그렇다면 어떻게 하느냐?가 관건이다. 컴퓨터로 하여금 일차함수 형태의 hypothesis까지 가르쳐주는 것이다. 머신 러닝 전체를 통 털어서 다루는 함수의 97% 정도가 바로 일차함수이다. 가장 쉽기 때문 아닐까? 일차함수라고 힌트만 주고 위 리스트형 데이터를 준 상태에서 알아서 w값을 찾아내라는 것이 바로 선형 회귀법 문제이다.

w는 미지수 이므로 처음에는 랜덤 수를 하나 생성하여 준 상태에서 일차함수 형태의 hypothesis를 사용하여 x_data를 입력해 보면 뭔가 숫자 값이 얻어지는데 그 결과가 당연히 y_data 와 일치하지 않으며 일치하지 않는 만큼 오차를 계산해 낼 수 있을 것이다. 얻어지는 오차가 양이나 음일 수 있으므로 제곱해서 합산한 전체 오차를 계산해 볼 수 있다. 문제는 컴퓨터가 어떤 방식으로든 학습을 해야 하는데 그 방법 중의 하나가 최소제곱법이다. 즉 계산되는 오차 값이 최소가 되도록 w 값을 바꾸어 보는 것이다. 위 문제의 경우는 최종 오차의 최소값이 0.0이 될 수 있다.

맨 처음에는 w 의 값을 모르므로 랜덤한 수로 처리한다고 해도 그 다음번에는 합산한 오차의 값이 줄어 들도록 w 값을 선택하는 법을 가르쳐야 한다.

지금까지 설명한 내용을 최소제곱법 기준으로 부연 설명해 보자.
hypothesis = w*x 이므로 x_data의 noname03.png 를 대입한 값에서 알고 있는 값 즉 정답 y_data의 noname04.png 값을 각각 빼고 제곱해서 합산하면 미지수 w에 관한 2차식이 얻어지는데 이를 cost 함수 또는 loss 함수라 한다.

noname05.png

이 w의 이차식의 최소값을 알아내기 위해서는 Matplotlib를 사용하여 그래프를 작성하는 것도 하나의 방법이 될 것이다.
하지만 컴퓨터에서 보다 빠르게 최소값을 찾아내기 위해서 w의 이차식을 미분하여 기울기를 계산하여 조금씩 w값을 움직여 함수값을 체크해 보아 함수 값 변동이 거의 없는 즉 최소값을 찾아내는 것이며 비로서 w값이 결정되는 것이다. 그러한 수치적인 방법을 경사하강법(Gradient Descent)이라고 한다.

이 문제를 파이선 언어로 코딩하려면 윈도우즈10에서는 아나콘다를 다운 받아 사용하면 편리하다. 반면에 라즈베리 파이에서 코딩해 보려면 OS를 설치함에 따라 Python2 또는 Python3 편집기가 설치되어 있으므로 그대로 이용하면 된다. 하지만 아나콘다나 라즈베리를 이용할 경우에는 필요로 하는 최소한의 라이브러리들 즉 머신 러닝을 지원하는 TensorFlow나 그래픽을 지원하는 Matplotlib 및 과학 및 수치 계산을 지원하는 NumPy를 설치해야 한다.

한편 Google에서 Colabo를 직접 사용하는 것도 대안이 될 수 있다. Colabo에서는 Python 라이브러리들을 별도로 설치할 필요가 없으며 직접 import tensorflow as tf 과 같이 입력해서 실행하면 그걸 족하다. PyTorch 도 별도로 설치할 필요가 없으며 첫줄에 import torch 한 줄이면 족하다.

Coin Marketplace

STEEM 0.27
TRX 0.13
JST 0.032
BTC 62656.62
ETH 2941.90
USDT 1.00
SBD 3.59