[이 자료는 Coursera Stranford University Andrew Ng 교수님의 강의 자료를 활용하였습니다.]
* Multiple Features
이전까지 간단한 Linear regression 모델을 봐왔다면, 이번에는 좀 더 다양한 변수가 담긴 multivariate linear regression 에 대해서 살펴보겠습니다. 아래의 표기법을 사용하도록 하겠습니다.
좀 더 직관적인 이해를 위해 예를 들어보겠습니다. θ0를 집의 기본적인 가격, θ1을 평당 가격, θ2를 층당 가격 등등 이라고 가정해보겠습니다. 그리고 x_1(x subscript 1)은 집의 평수, x_2는 층수 입니다.
행렬 곱셈을 이용하여 다변수 hypothesis 함수는 다음과 같이 간단하게 표기될 수 있습니다.
* Gradient Descent for Multiple Variables
이전 글에서, hypothesis 함수를 통해 집의 가격을 예측하는 모델을 만들 수 있다고 말씀드렸습니다. 집의 가격을 예측하기 위해서는 집의 가격을 결정하는 요소들이 무엇이 있는지 알아야 합니다. 그러한 요소가 n개가 있을때, n개의 feature가 존재한다고 말합니다. 아래 그림들은 다변수 Gradient descent 가 어떻게 작동하는지 보여줍니다.
이전에 다뤘던 일변수 gradient descent 와 지금 다루는 다변수 gradient descent가 별 차이가 없어 보입니다.
* Gradient Descent - Feature Scaling
Gradeint descent 작업을 더 빠르게 하고싶을 때, input value 들이 대략적으로 같은 범위에 있게 해주는것은 중요합니다. 왜냐하면, θ가 작은 범위에서는 빨리 내려가고 넓은 범위에서는 천천히 내려가기 때문입니다. 따라서, 변수들이 고르지 않다는것은 optimum 까지 도달하는데 비효율적으로 많은 연산이 필요하고 바람직하지 않은 상황이라는것을 알 수 있습니다.
위의 그림은 두 가지 테크닉인 feature scaling 와 mean normalization 을 보여줍니다. Feature scaling 은 최댓값에서 최솟값을 뺀 값으로 input value 를 나눠 줍니다. mean normalization 은 input value 에서 평균값을 빼주는 일을 합니다. 이 두가지를 동시에 하면 다음과 같은 식이 나옵니다.
* Gradient Descent - Learning Rate
Debugging gradient descent : x축을 반복 횟수, y축을 코스트 함수값으로 잡고 도표를 그립니다. 반복 횟수가 늘어나는데 코스트 함수 값이 증가하면 learning rate alpha 값을 줄여야 합니다.
Automatic convergence test : 반복을 통해서 코스트함수 값이 E보다 작아지면 수렴을 선언합니다. E는 10^-3과 같은 매우 작은 값입니다. 그러나 실제로는 이 임계 값을 선택하기가 어렵습니다.
위의 그림은 반복 횟수가 증가할 때 코스트함수 값이 감소하는 모양이기 때문에 우리가 원하는 그래프 모양입니다.
반복값이 증가하는데 코스트함수 값이 증가한다면 learning rate alpha 값을 줄여야 한다고 했습니다.
위 그림에서 learning rate alpha 값이 커지면 오른쪽의 이차함수 그래프에서 minimum 이 되는 코스트함수 값으로 수렴하는게 아닌 바깥쪽으로 값이 발산하게 됩니다. 이럴때 alpha 값을 줄여야 합니다.
적절한 alpha value는 모든 반복에서 코스트함수 값을 줄여주게 되지만 alpha 값을 너무 작게 설정하면, gradient descent는 매우 느리게 수렴할 수 있습니다.(연산이 기하급수적으로 늘어날 수도 있습니다.)
* Features and Polynomial Regression
위의 그림에서 hypothesis 함수는 frontage 와 depth 라는 두 가지 feature로 결정됩니다. 그런데 일상에서 우리는 frontage * depth = Area 라는 것을 이미 알고 있습니다. 그렇다면 굳이 2가지의 feature 를 사용할 필요가 있을까요? Area 한 가지 feature 를 사용해서 hypothesis 함수를 만드는 것이 좀 더 효율적으로 보입니다. feature 개수가 많이 늘어나게 되면 문제가 발생할 수 있기 때문입니다.
Polynomial regression 에 대해 생각해보겠습니다. 위의 그림과 같이 training data set 이 분포하면 linear 한 모델보다는 polynomial 한 그래프가 좀 더 코스트 함수의 값을 줄여줄 수 있을것 같아 보입니다. 그런데 일반적인 음의 계수를 가진 이차곡선을 데이터 set 그래프에 갖다 붙히면 오류가 생깁니다. x축의 값이 증가하면 y값이 감소하는 즉, 집의 사이즈가 증가하는데 집의 가격이 떨어지는 모순이 생기게 됩니다.
그렇다면 이차함수보다는 square root 그래프를 통해서 training data set 을 통과하는 그래프를 그려주는게 위의 그림에서는 더 효율적으로 보이네요. 그리고 그러한 경우들에는 반드시 feature scaling 을 해야 합니다.
* Normal Equation
Normal Equation 이 무엇이고 Gradient descent 와 Normal Equation 의 차이점은 뭔지 알아보도록 하겠습니다.
Gradient descent 는 코스트 함수값을 최소화 시키는 첫번째 방법이었습니다. 코스트 함수값을 최소화 시키는 두번째 방법이 바로 Normal Equation 입니다. global-minimum 까지 코드를 반복하며 수렴조건을 찾아가는 알고리즘이 없이 코스트함수를 최소화 시키는 이 Normal Equation 에 대해 알아보겠습니다.
Normal Equation method 의 기본 아이디어는 코스트 함수를 미분하는 것입니다. θj = 0 을 만족하는 각각의 θj들을 찾을것입니다. 이러한 과정은 어떠한 반복없이도 optimum θ를 찾게해줍니다. normal equation 공식 유도는 생략한 채, 공식만 아래에 삽입하였습니다.
X 행렬의 사이즈를 보면 알 수 있겠지만, 행의 개수는 training example 의 개수와 같고 열의 개수는 n개의 feature 개수 + 1 입니다. 열 벡터 y는 training example 의 개수와 같겠죠? θ를 구하는 이 식은 어떠한 feature scaling 도 필요하지 않습니다. 아래 표를 보고 gradient descent와 normal equation의 차이점을 알아보겠습니다.
normal equation 은 O(n^3)의 시간복잡도를 가집니다. 따라서, feature n의 개수가 늘어나면 그만큼 복잡도도 기하급수적으로 커집니다. n이 작을 때와 클 때를 비교하여 적합한 방법을 고르는게 중요하겠죠?