1. Multiple Features
실생활에서 회귀 문제를 풀기 위해서는 다양한 변수들이 존재한다.
집값을 예측하는 문제에서도 단순히 집 크기만 있는 것이 아니라 침실의 개수, 층 등 많은 특성들이 가격에 연관돼있다.
이제 특성(x)이 여러 개이므로 표기법을 알아야 한다.
- n = 특성의 수
- \(x^{(i)}\) = i번째 샘플의 입력값(특성)
- \(y^{(i)}\) = i번째 샘플의 출력 값
만약 두 번째 샘플의 특성을 나타내고 싶다면 다음과 같이 나타낸다.
Hypothesis 또한 x가 늘어남에 따라 다음과 같이 쓸 수 있다.
$$h _\theta(x) = \theta _{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + ... + \theta_{n}x_{n}$$
예를 들면, $$h_\theta(x) = 80 + 0.1x_{1} + 0.01x_{2} + 3x_{3} - 2x_{4}$$처럼 말이다.
집값 예측으로 위 식을 해석해보면, 80 : 집의 기본 가격, 0.1 : 집의 크기당 가격, 0.01 : 침실 개수당 가격, 3 : 층이 높아질수록 가격, -2 : 집의 age 당 가격에 해당한다.
편의상, \(x^{(i)}_0 = 1\) 이라고 두면, \(x\)와 \(\theta\)는 다음과 같이 \(n+1\) 차원의 벡터로 나타낼 수 있다.
이 것을 이용해서 우리가 앞에서 나타낸 가설 함수인 $$h _\theta(x) = \theta _{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + ... + \theta_{n}x_{n}$$를 벡터로 표현하면 $$h_\theta(x) = [\theta_{0} \theta_{1} ... \theta_{n}]\begin{bmatrix} x_{0}\\ x_{1}\\ ...\\ x_{n} \end{bmatrix} = \theta^{T}x$$로 축약해서 나타낼 수 있다.
2. Gradient descent for multiple variables
이제 다변량 선형 회귀에서 경사 하강법을 어떻게 적용할지 알아보자.
가설 함수와 비용 함수를 정리하면 다음과 같다.
여기에 경사 하강법 공식을 적용해보면 다음과 같다. (이때, \(\theta _{0}, \theta _{1}, ... \theta _{n}\)은 간단하게 \(\theta\)로 표현해도 된다.)
위 공식을 보면 알겠지만, 변수가 1개인 선형 회귀와 별 차이가 없다.
따라서 기본적인 공식은 단변량에 적용할 때와 같고, n의 수에 따라서 반복해주면 최종적인 알고리즘을 얻을 수 있다. (\(x^{(i)}_0 = 1\) 로 미리 정해줬다.)
간단하게 이렇게도 쓸 수 있다.
변수가 하나일 때와 여럿일 때를 비교해보면 아래와 같이 똑같은 것을 알 수 있다. (각 색깔마다 같은 것을 의미)
3. Gradient Descent in Practice 1 - Feature Scaling
경사 하강법을 쓸 때 변수 간 비슷한 스케일일수록 더 빠르게 수렴할 수 있다.
예를 들어, 다음과 같은 변수를 가진 선형 회귀 문제를 푼다고 생각해보자.
\(x_1\) 의 범위는 0-2000이고, \(x_2\) 의 범위는 1-5이므로 큰 차이가 난다. 따라서 cost function을 그려보면 아래와 같이 길이가 긴 타원형으로 나타나고 gradient descent가 최솟값을 찾는데 오래 걸릴 것이다.
이럴 때 필요한 것이 바로 scaling이다.
\(x_1\) 과 \(x_2\) 를 각각 2000, 5로 나눠준다면 cost function이 아래와 같은 원이 만들어질 것이고, 빠르고 간단한 길로 최솟값을 찾을 수 있다.
일반적으로 scaling 할 때 모든 변수들이 거의 (-1 ~ 1) 사이의 값을 가지도록 하면 좋다.
완전히 딱 맞출 필요는 없지만, 너무 많이 벗어나면 조정해줘야 한다.
- mean normalization
scaling 방법 중 mean normalization이라는 방법이 있다.
각 feature별로 평균을 빼주고, 표준편차나 (최댓값 - 최솟값)으로 나눠주는 것인데, 이렇게 하면 scaling 된 특성들의 평균이 0에 가까워진다.
예를 들어, 집값 예측에서 \(x_1\) 과 \(x_2\) 의 평균이 각각 1000과 2라고 하면 아래와 같이 scaling 되고, 범위는 대략 (-0.5 ~ 0.5)가 된다.
일반화된 식은 다음과 같다.
4. Gradient Descent in Practice 2 - Learning Rate
만약 Gradient Descent가 잘 돌아간다면 아래와 같은 그래프가 그려질 것이다.
매 반복마다 비용 함수가 감소하는 것을 볼 수 있다. 대략 300번 정도부터는 줄어들지 않고 수렴하는 것처럼 보인다.
Gradient descent가 수렴하는데 얼마나 반복해야 하는지는 미리 알기 어렵기 때문에, 이렇게 그래프를 그려서 수렴하는데 필요한 반복 횟수를 알 수 있다.
만약 아래와 같은 그래프가 나온다면 학습률이 너무 큰 것이므로 \(\alpha\)를 줄여줘야 한다.
\(\alpha\)가 너무 작으면 수렴하기까지 너무 오래 걸리므로 적절한 조정이 필요하다.
따라서 학습률을 실험해볼 때 $$[...0.001, 0.01, 0.1, 1 ...]$$ 이런 식으로 값을 바꿔가며 관찰하는 것이 좋다.
실제로 앤드류 응 교수님은 가능한 가장 큰 값과 가장 작은 값을 찾은 뒤, 아래와 같이 3배씩 차이를 줘서 관찰한다고 한다.
$$[...0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1 ...]$$
5. Features and Polynomial Regression
적절한 feature의 선택으로 알고리즘이 더 강력해질 수 있다.
이제 feature를 어떻게 선택할지 알아보고 Polynomial Regression에 대해서도 알아보자.
- Feature selection
집값을 예측하는 모델을 만든다고 할 때, 다음과 같은 변수들이 있다.
이럴 때는 frontage와 depth 2개의 특성을 사용하기보다, 2개를 곱한 Area라는 특성을 새로 만들어서 모델을 만드는 것이 복잡도를 줄일 수 있다.
- Polynomial regression
train 데이터 분포가 아래와 같을 때, 2차 함수로 모델을 만들면 잘 맞을 수도 있다.
하지만 2차 함수는 결국 떨어지는 곡선을 그리므로 Size가 커질수록 예측 정확도가 떨어질 것이다.
이런 경우, 아래 사진과 같이 3차 함수로 모델을 만들면 더 적절해질 것이다.
아래와 같이 Size를 제곱해가며 \(x\)들에 대입해주면 가설 함수를 쉽게 만들 수 있는데, 이런 경우 특히 Scaling이 중요해진다.
3차식을 만들지 않고, 아래와 같이 루트를 이용하는 방법도 있다. 루트 함수의 경우 하강하지도 않고 조금씩 위로 가며 수렴하기 때문에 적절한 모델이 될 수 있다.
변수가 주어졌을 때, 단순히 그것만을 사용하는 것이 아니라 효율적으로 조합하고 모델을 간단하게 만드는 방법을 생각해봐야 할 것이다. 또, 모델을 만드는 방법에도 어떤 예측을 하느냐에 따라 적절한 방법이 달라질 수 있다.
이번 강의에서는 다변량 선형 회귀와 경사 하강법 적용 시 팁, 그리고 변수와 모델의 선택에 대해 알아봤다.
다음 강의에서는 특정 선형 회귀에서 \(\theta\) 값을 구하는 데 효과적인 Normal Equation에 대해 알아볼 것이다.
* 공부 정리 목적으로 쓴 글입니다. 오타나 수정사항이 있으면 바로 알려주세요.
'데이터 사이언스 공부노트 > 머신러닝, 딥러닝' 카테고리의 다른 글
[코세라 강의 정리] 앤드류 응의 머신러닝 - Classification, Logistic Regression (0) | 2021.07.30 |
---|---|
[코세라 강의 정리] 앤드류 응의 머신러닝 - Normal Equation (0) | 2021.07.28 |
[코세라 강의 정리] 앤드류 응의 머신러닝 - Gradient Descent (0) | 2021.07.26 |
[코세라 강의 정리] 앤드류 응의 머신러닝 - Linear Regression, Cost Function (0) | 2021.07.26 |
[코세라 강의 정리] 앤드류 응의 머신러닝 - Supervised / Unsupervised Learning (0) | 2021.07.25 |