Linear Regression(선형 회귀분석)
Regression(회귀분석)은
'주어진 데이터를 이용하여 입력과 출력의 관계를 파악하고 이를 바탕으로 새로운 입력이 주어졌을 때 출력을 예측할 수 있는 모델을 찾는 것'
이라고 이해하면 편할 것이다.
회귀(回歸)분석이 무엇으로부터 어디로 돌아간다는걸 의미하는지 모르겠지만...
과정을 알고 결과를 유추하는게 아니라, 결과로부터 과정을 예측하기 때문일까?
라인에서 Regression의 회귀가 뭐에서 뭘로 돌아간다는 뜻인지 아냐고 질문을 던지니 친구 E가 쿨하게 책의 일부를 찍어서 보내주었다.
'회귀분석'은 변수들 간의 관련성에 관한 것으로, 예측을 위한 모형의 구축 및 여러가지 추론을 하기 위한 분야이다.
이때, 두 개의 변수만이 고려되면 이변량(bivariate)이고, 여러개의 변수들이 고려되면 다변량(multivariate)이 된다.
(중략)
변수들 간의 관련성에 관한 것이 회귀(regression)란 말로 불리어진 동기를 역사적으로 살펴보면, 영국인 과학자 프란시스 갤턴(Sir Francis Galton)경이 아버지와 아들의 키에 대한 관련성을 연구하면서 처음으로 회귀란 용어를 사용하였다. 자료를 분석해본 결과, 갤턴은 키가 매우 큰(작은) 부모의 아들은 평균보다는 큰(작은) 값을 가지지만 아버지의 키보다는 작은(큰) 경향이 있다고 결론 내렸다.
이 결과는 "Regression Toward Mediocrity in Hereditary Stature"라는 제목으로 1885년에 발표되었다. 여기서, "regression toward mediocrity(평범으로의 회귀)"란 아들의 키는 평균값에 가까워지려는 경향이 있다는 것을 의미한다.
아하.
데이터들 중에서 특출난 데이터를 가진 세대가 입력되더라도 세대교체를 겪으면서 뒤에 들어오는 데이터는 평범한 상태로 돌아가는 것을 보고 '회귀'라는 단어를 쓴 것이다. 추후에 입력되는 데이터가 평범할 것이라고 가정하면, 이미 주어진 데이터를 분석해서 '평범한 데이터' 를 유추하는 것이 새로 들어올 입력 데이터는 이런 값일거라 유추하는 셈이 된다.
주어진 데이터들의 coherence를 파악하는 것이라고 표현해도 될 것이고, Regression은 coherence가 지켜지는 계(System)에서만 의미가 있겠구나.

▲ 우리는 빨간 X의 데이터를 보고 X가 나타나지 않은 다른 size의 가격은 대충 파란선이 지나는 가격을 가질 것이라 쉽게 유추할 수 있다.
이쯤에서 강의가 Machine Learning을 main topic으로 진행됐던 것을 밝혀둔다.
Regression에 대해 대략적으로 알아봤으니 본격적으로 regression이 어떻게 진행되는지 알아본다.

▲ 위의 주어진 그림을 통해 그려진 Regression 개념도
집의 크기에 따른 가격은 그림처럼 이미 발생한 거래 정보를 학습 데이터(Training Set)로 하여 어떠한 Learning Algorithm을 통해 학습된 regression 모델 h를 통해 유추할 수 있을 것이다.
위 그림에서 파란선을 명확히 하기 위해 hypothesis를 일차함수의 형태로 구성하면 다음과 같다.

입력 값(size)

출력 값(price)

우리는 이미 알고 있는 데이터(학습 데이터)를 h에 입력했을 때, 결과가 이쁘게 나오도록 계수
들을 부여하면 된다.
그럼 이 계수들을 어떻게 설정해줘야할까?
학습 데이터들을 h에 입력했을 때 우리가 알고 있는 출력값(목표값)과 비슷할수록 계수들을 이쁘게 잡았다고 표현할 수 있을 것이다.
다른 말로 하면 학습 데이터에 대한 출력값과 목표값 사이의 오차를 최소로 하는 계수를 찾으면 된다.
이 오차가 얼마나 되는지 판단하기 위해 분산을 사용하며 일반적으로 Cost function 이라고 부른다.

이제 hypothesis도 결정했고 모델의 성능을 나타낼 Cost function도 알아보았다.
자, 그럼 우리는 Cost function J가 최소가 되는 계수를 한 번에 구할 수 있을까?
.....
[ 주말 내내 열심히 놀았기 때문에 아래는 속기. 물론 추후 수정 ]
는 상수이기 때문에 생략하고
과
의 관계를 그래프로 나타내면
가 최솟값을 가지는
을 기준으로 대칭되는 이차곡선의 형태가 나타날 것이다. 따라서 이 그래프를 미분하여
가 최소값을 갖는
를 찾을 수 있다.
문제는 이 과정을 정규식의 형태로 풀면
의 time complexity를 가지기 때문에
의 수가 늘어날 수록 계산량이 엄청나게 많아진다.
따라서 우리는 시간을 단축하면서도 어느정도 성능을 보장하는 gradient descent 방법에 주목한다.
gradient descent는 점차적으로
의 값을 조정하여
가 충분히 작은 값을 가질 때까지(convergence) 반복하는 방법이다.
이를 수식으로 나타내면 다음과 같다.

위 수식에서
는 학습률(learning rate)이며 미분값을 얼마나 반영할지 나타낸다.
일반적으로
의 범위 내의 실수 값을 부여한다.
의 크기가 예측 과정에 영향을 끼치는 부분이 있는데 하나는 너무 작은 경우에는 gradient descent의 계산이 많아져 속도가 느려진다는 문제가 있다.
다른 면에서는
의 크기가 크면 매 반복마다
가 최소값(minima)을 갖는 방향으로
가 빠르게 변화하겠지만
가 너무 크면 어느정도 이동한 시점에서 진동하거나, 오히려 수렴하지 않고 발산하여 minima를 찾지 못하는 경우가 발생할 수 있기 때문이다.
gradient descent는
시간보다는 확연히 빨리 minima에 수렴할 수 있는 방법이지만 대상이 Convex function이 아니라면 그 결과가 global minima라는 보장은 없다. global minima라는 최적해에 도달하지 못함에도 불구하고 gradient descent 방법을 사용할 수 있는 것은 최적해가 아니라도 예측 결과가 나쁘지 않기 때문이다. 빠르기도 하고.
이러한 gradient descent 방법을 한참 위에서 세운 linear regression의 hypothesis에 적용하면 아래와 같은 형태가 된다.


Batch Gradient Descent 라는 단어가 있는데, 여기서 Batch는 gradient descent의 각 단계가 모든 학습 데이터를 사용한다는 의미라고한다.