본문 바로가기
Coursera 강의/Machine Learning

[Machine Learning] Multivariate Linear Regression

by 별준 2020. 8. 4.
해당 내용은 Andrew Ng 교수님의 Machine Learning 강의(Coursera)를 정리한 내용입니다.

- Multivariate Linear Regression

[Multiple features]

우리가 앞서 배운 Linear Regression 에서는 하나의 feature를 가진 x(집의 넓이)가 있었고, 그 x로 y(집의 가격)를 예측하는 것이었다. 하지만, 집의 가격을 결정하는 요소(feature)로 '침실의 개수' 또는 집이 지어진 지 얼마나 오래되었는 지도 알고 있다면 가격읠 결정하는 더 많은 요소(feature)를 갖게 된다. 이처럼 실제 상황에서는 하나의 변수만으로는 예측하기 어려운 경우가 많고, 이번 시간에 여러 개의 변수를 이용한 Multivariable Linear Regression을 알아볼 것이다.

 

즉, 집의 가격을 예측하는 문제에서 집의 넓이뿐만 아니라 방의 개수, 층수, 그리고 건물의 연식을 고려하여서 집의 가격을 예측할 것이다.

위와 같은 Training Set에 대한 새로운 용어의 정의는 위를 참조하라. i는 training example의 index이고, j는 feature의 index를 의미한다.

변수가 하나일 때의 hypothesis function(가설 함수)는  이었지만, 이제 변수가 한 개 이상이고 가설함수를 일반화하여 나타내면 다음과 같다.

 

위에서 주어진 집의 가격 추측 문제에서는 가설 함수가 다음과 같이 나타낼 수 있다. 

 

위의 식을 직관적으로 해석해보면, 은 기본 집의 가격이라고 볼 수 있고, 은 제곱피트당 가격, 은 침실 개수당 가격, 는 감소에 영향을 주므로 age에 해당한다고 볼 수 있다.

 

우리는 이 식을 행렬 곱을 통하여서 가설 함수를 아래와 같이 간략하게 나타낼 수 있다. 편의상 으로 정의하고 가 모두 n + 1 차원이 되도록 하였다.

다시 표현하자면 가설함수는 아래와 같이 표현할 수 있다.

이것은 한 개의 training example, 즉 한 개의 feature에 대한 벡터화(vectorization) 이고, 각 training example을 row-vector로 표현하여 X 행렬을 나타내어 다음과 같이 가설함수를 m x 1의 벡터로 표현할 수 있다.

,

 

[Gradient Descent for Multiple Variables]

우리는 지금 Multiple Variables을 갖는 경우(여러 개의 feature를 갖는)의 Hypothesis Function(가설 함수)에 대해서 살펴보았다. 이제 우리는 가설 함수의 파라미터들을 어떻게 지정하는지 알아볼 것이고, Gradient Descent(경사하강법)를 어떻게 적용할 것인지 살펴볼 것이다.

 

기존에 feature가 1개인 경우(Univariate linear regression)에는 아래와 같은 Gradient Descent를 적용하면 되었다.

(참조 : 2020/08/04 - [Machine Learning/Machine Learning | Andrew Ng] - [Machine Learning] Gradient Descent)

하지만 Multivariate linear regression의 경우에는 아래와 같은 Gradient Descent를 진행하면 된다.

Repeat until convergence {

} simultaneously update for every j = 0, 1, ..., n

 

이 때, Cost Function은 다음과 같이 나타내어 진다.

 

그리고 위 식을 각각의 파라미터에 대해서 적용하면 아래와 같다.

Repeat until convergence {

...

} simultaneously update for every j = 0, 1, ..., n

 

 

[Feature Scaling]

Featrue Scaling은 Gradient descent를 잘 활용할 수 있는 방법 중 하나이다. Feature Scaling의 개념은 서로 다른 feature라도 비슷거나 같은 범위에 있다면 gradient descent는 더욱 빠르게 수렴할 수 있다는 것이다.

위의 그림의 Example 1을 보면 2개의 Feature가 갖는 범위의 차이가 많이 나서 Cost Function은 많이 찌그러진 타원의 모양을 갖게 되며, Global Optima을 구하는데 오랜 시간이 걸리게 된다. 하지만 오른쪽의 Example 2에서는 각 Feature의 값(범위)을 최대값 or 최대값 - 최소값 등과 같은 값으로 나누어진 값으로 치환하여 계산하면 Cost Function의 그래프는 원에 가까운 모양이 될 것이고 더 적은 Gradient Descent 연산으로 Global Optima를 찾을 수 있다.

 

[Mean normalization]

Mean normalization이란, 어떠한 feature의 데이터 값에 해당 feature 평균을 빼고, 데이터의 범위나 표준 편차로 나누어주는 것이다. 이 방식으로 데이터를 re-scaling 할 수 있다.

 

Replace  with  to make features have approximately zero mean(Do not apply to )

[Learning Rate]

이번에 우리는 디버깅(Debuggin) 작업을 통해 Gradient Descent가 적절하게 동작하기 위한 방법과 Learning Rate를 선택하는 방법에 대해서 알아볼 것이다. 이전에 배웠듯이 Gradient Descent의 역할은 Cost Function J를 최소화하는 파라미터를 찾는 것이며, 이것에 대한 디버깅 작업은 Gradient Descent를 적용할 때마다 변화하는 Cost Function 를 그래프로 그리면서 올바르게 감소하는지 확인하는 작업이다. Gradient Descent가 올바르게 동작한다면 그래프는 아래와 같은 모양이 될 것이다.

위 그래프처럼 매 Gradient Descent(매 iteration)마다 Cost Function의 값은 감소해야 한다. 그리고 반복이 진행될수록 Cost Function의 기울기는 0으로 수렴하게 될 것이다. 보통 몇 번의 반복이 필요한 지 알 수 없으므로 보통은 그래프를 그리며 수렴하는지를 확인한다. 또한, 수렴하는지 아닌지 자동으로 검사하는 알고리즘인 Automatic Convergence Test를 사용하여 수렴여부를 파악할 수도 있습니다.

 

[Automatic Convergence Test]

이 방법의 정의는 다음과 같다.

Declare convergence if  decreases by less than in one iteration, where  is some small value such as .

즉, Cost Function의 감소량이 어떤 작은 값보다 작을 때를 기준으로 수렴했는 지 판단한다. 일반적으로 그 값은 이지만 문제에 따라서 다르며, 실제로 이 값을 정하는 것은 어려운 문제이다.

 

 

위 그래프처럼 Cost Function의 값이 증가하는 경우에는 Gradient Descent가 잘못 동작하고 있으며, 이는 Learning Rate가 너무 커서 아래와 같이 증가하기 때문이다. 이 경우에는 Learning Rate의 값을 감소시키면 된다.

위와 같이 증가와 감소를 반복하는 경우에도 Learning Rate를 감소시키면 된다.

 

충분히 작은 Learning Rate를 사용한다면, Cost Function은 매 iteration마다 감소하는 것은 수학적으로 증명되어 있다. 그러나 Learning Rate의 값이 너무 작다면 Gradient Descent가 수렴하는 데에 너무 오래 걸릴 수 있다. Learning Rate 값을 3씩 곱하거나 나누며 조절하는 것을 추천한다.

 

Summary :

- If learning rate is too small : slow convergence

- If learning rate is too large : Cost Function may not descrease on every iteration; may not converge.(Slow converge is also possible)

 

To choose Learning Rate, try

..., 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1, ...

 

 

[Features and Polynomial Regression]

이번에는 Feature를 간단하게 선택하는 방법과 적절한 feature의 선택으로 강력한 학습 알고리즘을 만드는 방법에 대해서 알아보자. 그리고 Linear Regression(선형회귀)를 이용하여 복잡한 비선형 함수에 적용하는 Polynomial Regression(다항회귀)에 대해서도 알아볼 것이다.

 

[New Feature]

 

위의 그림과 같이 집의 frontage(가로 길이)와 depth(세로 길이)에 대한 값이 주어지도 가격을 예측하는 경우에, 두 개의 features, 즉 frontage와 depth를 사용하여 가설함수를 세울 수 있습니다. 하지만 이렇게 두 개의 feature를 사용하는 것은 비효율적이며, Area(=frontage x depth)라는 새로운 feature를 만들어서 가설함수를 단순화하는 것이 효율적이다. 새로운 feature를 만들어서 더 나은 Model을 정의해도 좋다.

 

[Polynomial Regression]

위와 같은 Data Set은 Linear으로 표현하기에는 어려움이 있다. 이 Data Set을 포현할 수 있는 다른 모델들이 있는데, 그 중 하나는 2차 함수 모델로 표현할 수 있다. 하지만 2차 함수 모델은 최대값을 찍고 감소하는 형태이기 때문에, 집의 크기가 일정 크기 이상으로 커지면 집값이 감소하는 이상한 모델이 된다. 이는 Data Set과 잘 맞지 않을 것이다.

다른 대안으로 3차식을 이용하여 가설함수를 표현할 수 있다. 즉, 1차항은 집의 크기, 2차항은 (집의 크기)의 제곱, 3차항은 (집의 크기)의 세제곱이 되는 것이다. 

비슷한 방식으로 제곱근 형태의 feature도 만들 수 있다.

 

주의할 점은 이렇게 feature를 만들면 feature scaling이 더 중요해진다는 것이다. 예를 들어, 의 원래 범위가 1~1000이었다면, 2차항의 범위는 1~1000000, 3차항의 범위는 1~1000000000이 된다.

 

여러개의 다른 feature가 있는 경우 어떤 feature를 사용해야되는지 혼란스러운 상황이 있을 수 있다. 후에, 자동으로 어떤 feature를 선택할 지 알려주는 알고리즘에 대해서 배울 것이다. 이 알고리즘은 Data Set을 보고 자동으로 2차 함수나 3차 함수, 혹은 다른 함수들 중에 알맞는 것을 선택한다.

중요한 것은 어떤 feature를 사용할 지는 여러 방법이 있고, 이런 features를 고안하여 직선이 아닌 복잡한 함수로 표현할 수 있다는 것이다. 우리는 적절한 feature로 더 적절한 Model을 세울 수 있어야 한다.

댓글