이번에는 선형회귀에 대하여 알아보겠습니다.
선형회귀는 데이터의 경향성을 일차함수인 y = a*x + b의 관계로 표현한 것입니다.
예를 들어 x의 값이 [1 2 3 4]일 때 y 결과값이 [3 5 7 9]이라면 y = 2*x + 1로 나타낼 수 있습니다.
하지만 실제 세계에서는 x와 y의 관계가 위와 같이 정확하게 표현되지 않습니다.
그 이유로는 관측자가 측정장치로 측정값을 얻어낼 때 측정장치의 정밀도, 주변환경, 사용자의 숙련도 등에 따라서 데이터에 일정부분 오차가 포함되게 됩니다.
따라서, 이러한 부분을 감안하여 데이터의 경향성을 파악하기 위해서는 선형회귀 알고리즘을 적용할 수 있습니다.
예를들어 한 학원 선생님이 학생들이 공부한 시간에 따른 시험점수를 파악한 데이터를 가지고 있다고 가정해봅시다.
데이터를 그래프로 표현해 보았더니 다음과 같은 형태로 무질서해 보이지만 학생들의 공부시간이 많을수록 시험점수가 높아지는 경향성을 발견하였습니다.
이것을 토대로 A라는 학생이 공부한 시간에 대하여 예상시험점수를 AI로 예측하고자 합니다.
하지만 초기에 컴퓨터는 이러한 것에 대한 예측을 전혀 할 수 없습니다. 따라서 예상시험점수를 예측하기 위해서는 기존 데이터를 가지고 선형회귀에 대한 학습을 진행해야 합니다.
이때 가장 적합한 회귀선을 구하기 위해서는 직선의 기울기 “a”와 y절편인 “b”를 구해야 합니다.
그렇다면 가장 적합한 회귀선은 어떤 것일까요?
적절한 판단력을 가진 사람이라면 데이터와 직선 사이의 거리 차이가
최소가 되는 방향으로 직선을 그릴 것입니다.
이때 활용되는 방식이 평균제곱오차를 활용한 근사법입니다.
평균제곱오차는 임의의 직선 y와 점들사이의 거리를 제곱한 값들의 평균이며
다음과 같이 나타낼 수 있습니다.
이와 같이 평균제곱오차를 구하고 나면 우리는 컴퓨터로 하여금 수치해석학적으로 평균제곱오차가 최소값을 갖는 직선을 찾도록 해야 합니다.
이때 사용하는 방법이 경사하강법 입니다. 경사하강법의 알고리즘은 다음과 같습니다.
초기에 적당한 직선의 기울기 a와 y절편 b값을 선정합니다.
이 점에서의 오차값 및 J의 기울기를 확인하고 J가 감소하는 방향으로 a값과 b값을 조금씩 변경합니다.
이 과정을 반복하면 J의 최소값에 해당하는 a와 b값을 찾을 수 있게 됩니다.
J의 최소값을 찾기 위해서는 J를 a와 b에 대하여 편미분을 취해야 합니다. (※ 어떤 함수의 최소값은 기울기가 0인 지점임)
그리고 a와 b의 값을 조금씩 변경하기 위해서는 임의의 학습률(α)을 설정하여 이전 a값에 J의 기울기와 학습률을 곱한값을 차감하는 과정을 반복해야 합니다.
이러한 학습 알고리즘은 다음과 같습니다.
이렇게 정리하다보니 수학공식이 생각보다 복잡함을 알 수 있습니다.
이러한 일련의 수학 공식을 알고리즘으로 구현하려면 개발자가 많은 시간과 노력을 투여해야 합니다.
하지만 이제는 그럴 필요가 없어졌습니다.
텐서플로우, 케라스와 같은 오픈소스가 대거 공개되면서
이제는 약간의 수학적 지식과 머신러닝에 필요한 데이터만 있으면 누구나 쉽게 구현할 수 있게 되었습니다.
다음 시간에는 텐서플로우와 케라스를 활용하여 선형회귀 예측을 구현하는 방법에 대해 소개하도록 하겠습니다.