선형회귀란?
가장 간단 + 딥러닝의 기초가 되는 머신러닝 알고리즘으로,
데이터들을 가장 잘 표현하는 1차 함수식을 만드는 것이다.
(이번 포스팅에서는 기초적인 내용의 이해를 위해 "특성이 1개"인 모델에 대해 이야기 한다.)
일반적으로 우리가 아는 1차 함수식은
y = a*x + b의 형태
이것을 머신러닝에서 쓰는 방식으로 바꾸면
y_hat = W*x + b이다.
(선형함수식이라고 표현을 한다.)
x: 입력값
y: 타겟값
W: 가중치
b: 절편
1차 함수식을 y와 x에 대한 식으로 이해를 하듯이
위 식을 W와 y_hat에 대한 식으로 이해를 하면 된다.
☞왜 y가 아니라 y_hat?
y와 y_hat의 차이점을 설명하자면,
y는 이미 우리가 가지고 있는 정답이라고 볼 수 있고,
y_hat은 y를 예측하기 위해 입력값 x에 가중치를 곱하고 절편을 더하여 계산한 값(W*x + b)
이라고 볼 수 있다.
※선형회귀의 목표
y_hat이 y에 가장 가까워질 수 있는 가중치(W)와 절편(b)을 찾는것
선형회귀 구현
절편(b)과 기울기(W)를 찾기 위해서는 어떤 방법을 사용해야할까?
경사하강법(Gradient Descent)을 통해서!!
경사하강법이란,
모델이 데이터를 잘 표현할 수 있도록 "기울기(변화율)"를 사용하여 모델을 조금씩 조정하는 것
<주의!!>
하지만, 회귀문제(알맞은 기울기와 절편을 찾는 것)를 풀기 위해서
'경사하강법'이 유일한 것은 아니다!
다른 방법으로는
정규방정식(Normal Equation), 결정트리(Decision Tree), 서포트 벡터 머신(Support Vector Machine)
등이 있다.
※ 가중치(W)와 절편(b)을 찾는 방법
1. 무작위 W, b 생성
2. x에서 샘플 1개를 꺼내 y_hat계산
3. y와 y_hat 비교
4. y와 y_hat이 가까워지도록 W, b 조정
5. 2~4 반복(이때, 2~4의 과정을 한바퀴 도는 것을 에포크(epoch)라고 부른다.)
직관적으로 이해가 잘 가기는 하지만,
y와 y_hat을 어떻게 가까워지도록 할 것인지
에 대해서는 의문이 남는다.
이것을 해결하기 위한 방법이 '경사하강법'이라는 것이고,
경사하강법은 '기울기(변화율)'를 통해서 이 문제를 해결하는 것이라고 보면 된다.
그렇다면, 기울기(변화율)를 어떻게 이용을 하는 것일까?
일단, W와 b의 변화율을 구하기 위해
위의 선형 함수에서 W, b의 변화율은 식을 W, b로 미분을 한 값
→ w_rate = x
b_rate = 1
하지만, 여기에서 바로 끝나지 않고
y와 y_hat의 차이, 즉, 오차율(y - y_hat)을 변화율에 곱하여 가중치와 절편을 업데이트해준다.
이 값을 각각 W와 b에 더해주면, (W, b 업데이트)
W = W + w_rate * (y - y_hat)
b = b + b_rate * (y - y_hat)
※ y - y_hat(오차율)을 변화율에 곱해주는 이유:
1. W와 b의 수정폭을 오차 값에 따라 더 알맞게 조정할 수 있다.
2. y_hat의 값에 상관없이 W, b는 항상 오차가 작아지는 방향으로 이동하게 된다.
이렇게,
W와 b에 각각의 변화율과 오차율을 곱한 값을 더해 업데이트를 하는 것을
'오차 역전파(backpropagation)'이라고 한다.
'기계학습 > Machine Learning' 카테고리의 다른 글
[Hands-on Machine Learning] Machine Learning (의미와 종류) (0) | 2020.07.03 |
---|---|
회귀분석 - 단순 선형 회귀분석 (0) | 2020.03.02 |
(JH) 선형회귀(Linear Regression) - Do it 딥러닝 입문 2 (0) | 2020.03.01 |
(JH) 텐서플로우 기본 개념과 용어 2 (placeholder) (0) | 2020.02.27 |
(JH) 텐서플로우 기본 개념과 용어 1 (0) | 2020.02.27 |
최근댓글