본문 바로가기

카테고리 없음

머신러닝-linear regression

이 글에는 supervised learning에서도 linear regression에 대해 정리할 것이다. Linear regression은 머신러닝의 기초가 되는 아주 중요한 내용이기 때문에 꼭 이해하고 넘어가는 것이 좋다.

 

선형성이란 직선처럼 똑바른 도형, 또는 그 성질을 갖는 대상 (위키백과) 라는 뜻이다. 쉽게 생각하면 중학교 때 배웠던 일차함수를 떠올리면 된다. 

y = ax1 + bx2 + cx3 + ... 이렇게 이런 식으로 일차항들의 합으로 이루어진 함수를 선형이라고 한다.

 

Linear regression은 input과 output이 있을 때 이 점들을 선형으로 regression 하는 것을 의미한다. 예를 들어, 집의 크기와 그에 대한 집값의 그래프를 그려본다고 하자.

집의 크기와 그에 따른 집 값의 그래프 [출처: Andrew Ng, Coursera 강좌: supervised machine learning: regression and classification 에서]

이것을 linear regression 하면 다음과 같이 나타낼 수 있다. 

집의 크기와 그에 따른 집 값의 그래프 [출처: Andrew Ng, Coursera 강좌: supervised machine learning: regression and classification 에서]

여기서 곱하기 모양으로 표시된 점들의 집의 크기를 x(i), 그에 따른 집 값을 y(i)라고 하자. 파란색의 linear 함수는 f(w,b) = wx +b라고 표현할 수 있다. 여기서 w는 그래프의 기울기를, b는 그래프의 y 절편을 의미한다. 이 내용에 대해 잘 이해가 가지 않는다면 일차함수에 대해 추가적으로 공부하길 바란다.

 

결국, linear regression이란 input variable과 output variable 들의 데이터가 있을 때 이것에 대한 linear function의 w와 b 값을 찾는 것이다. 그러면 w와 b 값을 찾아내는 과정을 살펴보자.

 

Cost function을 계산함으로써 적절한 w와 b를 찾아낼 수 있다. 임의의 점 x(i)에 대해 linear regression으로 추측한 값 y는 yhat으로 표현할 수 있다. 이것에 대한 실제 y(i)값과의 차이 yhat- y(i)를 error라고 한다. 이 error 값이 작을 수록 linear regression이 정확하다고 말할 수 있다. 모든 input과 output에 대한 error를 계산하면 sigma i=1부터 m까지 (yhat-y(i))^2이다. 제곱을 하는 이유는 계산을 더 정확하게 하기 위함이다. 이것에 대한 평균을 구하려면 m으로 나누면 된다. 일반적으로는 m대신 2m으로 나누는데 이것은 계산의 편의성을 위함이다. 

 

Cost function J(w,b) = 2m분의 1* sigma i=1부터 m까지 (yhat-y(i))^2 이다. 이 cost function이 작을수록 linear regression의 정확도가 높다고 할 수 있다. 즉 cost function이 최소화 되는 w와 b를 찾으면 linear regression이 완료됐다고 할 수 있다. cost function의 그래프를 그리면 아래와 같이 그릴 수 있다. 오목한 모양의 그래프에서 가장 낮은 지점의 w와 b 값이 linear regression이 가장 정확한 w와 b 값이다.

 

Cost function을 시각화한 이미지 [출처: Andrew Ng, Coursera 강좌: supervised machine learning: regression and classification 에서]

 

이제 cost function의 가장 아래부분을 어떻게 찾는지 알아보자. Gradient descent algorithm으로 J(w,b)를 가장 작게하는 w, b 값을 구할 수 있다. gradient descent는 어떤 지점에서 시작한다고 했을 때, 그 지점을 기준으로 기울기가 가장 크게 내려가는 지점으로 조금씩 이동해서 아랫쪽으로 내려가는 방법이다. 이렇게 하면 모든 지점을 계산할 필요없이 빠르게 J(w,b) 값을 최소화하는 지점을 찾아낼 수 있다. 아래 그림에서 gradient descent를 이해할 수 있다.

Gradient descent를 진행하는 과정 [출처: Andrew Ng, Coursera 강좌: supervised machine learning: regression and classification 에서]

이 과정은 수학적으로 계산될 수 있다. J(w,b)를 w와 b에 대해 편미분하면 그 지점에서의 J(w, b) 그래프의 기울기를 계산할 수 있다. alpha 값은 learning rate를 의미한다. alpha가 클 수록 계산하는 점들의 거리가 멀어진다. 즉 alpha 값이 커지면 정확도는 낮아지더라도 계산하는 양이 줄어든다. 이 계산을 계속해서 반복하여 어떤 값에서 수렴하면 gradient descent가 완료됐다고 볼 수 있다. 편미분에 대한 지식이 없어도 의미만 이해하면 된다. 편미분에 대해 자세히 알고 싶다면 미적분학을 공부하길 바란다.