2-1 Multivariate Linear Regression 본문

ML & DL/Coursera-ML

2-1 Multivariate Linear Regression

eremo2002 2019. 1. 8. 12:53












우리는 feature 하나인 예측 문제를 다뤘다.

실제로 값을 예측하기 위해선 여러 feature들을 고려해야 한다.

이제 feature 여러 개인 문제를 다뤄보도록 한다.









값을 예측하기 위해 4개의 사이즈, 침실 , , 지어진 기간 등의 여러 변수를 고려해보자

이러한 feature들을 x1, x2, x3, x4라는 notation 사용하여 나타내며 예측을 해야 하는 price y 둔다.

Feature 표기하는 notation 대해 살펴보면

N feature 개수가 된다. 여기선 4개의 feature 사용할 것이기 때문에 n=4 된다.













X 위첨자를 사용한 x^(i) training sample 중에 i 번째 sample 가리킨다는 뜻이다.

따라서 x^(2) 번째 sample 가리키며 이는 오른쪽에 표기한 4차원 벡터로 나타낼 있다.











마지막으로 아래첨자 j 더해진 표기는 i번째 feature vector에서 j번째 원소를 가리킨다는 뜻이다.














따라서 4개의 feature 사용해서 가설 h(x) 만들면 이렇게 정의할 있다.












하지만 현실에 존재하는 문제는 고려해야 하는 feature 수가 굉장히 많을 것이다.

만약 n개의 feature 사용해야 한다면 가설 h(x) 이렇게 정의할 있다.

그리고 이렇게 정의한 가설을 벡터를 사용하여 간편하게 정의할 있다.










N개의 θ있다. 따라서 변량의 수도 n개로 맞추기 위해 x0 1 설정하자

그러면 X n+1차원의 벡터θ역시 n+1차원의 벡터로 표기할 있다.

θtranspose 적용하여 x 내적을 하면 정말 간단하게 n개의 feature 가지는 h(x) 표기할 있다.

이렇게 여러 개의 feature 가지는 선형회귀를 Multivariate linear regression(다변량 선형회귀)라고 한다.


독립변수 x(feature)가 여러 개인 선형 회귀를 다중 선형 회귀라고 한다.

종속변수 2개 이상이여서 y가 벡터인 경우 다변량 선형회귀라고 한다.


종속변수 1개, 독립변수 1개,  => 단변량 단일 선형 회귀

종속변수 2개 이상, 독립변수 1개 => 다변량 단일 선형 회귀

종속변수 1개, 독립변수 2개 이상 => 단변량 다중 선형 회귀

종속변수, 독립변수가 모두 2개 이상 => 다변량 다중 선형 회귀






















우리는 앞서 feature n개인 h(x) 어떻게 정의하는지 배웠다.

n개의 파라미터를 가지는 cost function 정의도 똑같다. 다만 θ0, θ1, … , θn이라고 일일이 나열하기보다

파라미터 θ집합을 n+1차원의 벡터로 간단하게 사용하자

그러면 cost function 정의 역시 θ벡터의 비용함수로 정의할 있다.











Gradient descent 알고리즘을 사용해서 나타낸 수학적 정의도 이렇게 표현할 있다.











우리는 n=1 Gradient descent 이렇게 정의하였다.











만약 n 1이상이라면 Gradient descent 오른쪽과 같이 나타내면 된다.

업데이트 rule feature 수와 상관없이 항상 동일하다.










N개의 feature 다루는 가설 h(x) 정의하고 이를 n+1차원의 벡터로 간단히 나타내기 위해 x0 1 두고 벡터를 만들었다.

이것은 θ0 업데이트하는 식에서 보듯이 뒤에 x0 1로서 곱해지는 것과 같다.















Feature scaling 사용해서 Gradient descent 알고리즘이  빠르게 수렴할  있게 한다.











아이디어는 feature들의 scale 서로 비슷하게 맞춰주자는 것이다.

예를 들어 x1 0~2000 범위 사이의 값을 가지고 x2 1~5 사이의 값을 가진다고 하면 비용함수 J 대략 그렸을 대략 이런 타원 모양이 나오게 된다.

(여기선 θ0 생략하였다. 그리고 x1 θ1 대응되어야 하는데 자료상의 오타인 같다.)











그리고 이러한 비용함수에 gradient descent 적용한다면 이렇게 왔다 갔다 진동하면서 굉장히 많은 시간이 지나야 최소값에 도달한다.

이는 타원의 모양이 얇아질 수록 많은 시간이 걸릴 있다는 문제가 된다.











바로 이러한 문제를 해결하기 위해 feature 조절(scale)하는 것이다.

Feature x_1 크기를 2000으로 나눈 값이라 하고, feature x_2 침실 수를 5 나눈 값으로 조절해주자

그러면 범위가 0에서 1사이로 바뀐다.

그러면 비용함수의 모양은 훨씬 원에 가까워질 것이다.

이렇게 되면 gradient descent 적용했을 난해한 경로로 복잡한 궤도를 그리며 이동하기보다 올바른 방향으로 이동하게 된다.











일반적으론 feature scaling -1 ~ 1사이의 값으로 조절해주지만 반드시 범위를 맞춰야 하는 것은 아니다.

비슷한 범위를 갖도록 대략적으로 맞춰주면 된다. (이건 명확한 rule 존재하는 것이 아니라 사람마다 기준이 조금 다를 있다.)

따라서 x_1 조절해서 0~3이라는 범위를 갖도록 조절하고 x_2 -2~0.5사이의 값으로 조절해주어도 괜찮다. +-1 비슷한 값이기 때문에 gradient descent 적용하기에 충분하다.

그러나 -100~100, -0.0001 ~ 0.0001처럼 +-1보다 굉장히 크고 굉장히 작은 범위를 갖는 된다.











그리고 feature를 scaling 위한 mean normalization이라는 기법을 소개한다.

Mean normalization x_i라는 feature (x_i - u_i) 바꿔준다. 이러면 일단 평균이 대략 0 된다. (feature x_0 1이기 때문에 x_0에는 사용하지 않는다.)

이렇게 평균값을 빼고나서 feature 범위의 (최대값-최소값)으로 나눠주면 된다. 혹은 표준편차를 알고 있다면 표준편차로 나눠줘도 된다.

크기, 침실 feature mean normalization 적용했을 범위가 -0.5 ~ 0.5 scaling된다.

(침실 feature 범위가 1~5니까 최대값 - 최소값이 4 아닌가요? -> 그렇게 해도 되고 이렇게 해도 된다. 어차피 근사값이기 때문에 크게 상관없다.)

다시 말하지만 feature scaling 중요한 것은 gradient descent 빠르게 수렴할 있도록 범위를 대략적으로 조절하는 것이지 반드시 범위에 들어가게 만들어야 되는 아니다.






























이번에는 Gradient descent에서 learning rate 디버깅하고 어떤 값으로 초기화 하는게 좋은 것인지 알아보자













그래프는 gradient descent 반복 횟수에 따라 cost function 값이 줄어드는 것을 보여주는 그래프이다.

Iteration 100, 200, 300 지점에서의 cost값이 얼마인지 그리고 그때의 파라미터 θ값이 구할 있다.

그리고 반복을 계속 때마다 cost값이 지속적으로 감소되는 모습을 보인다.

그러나 iteration 300 이상 넘어갔을 때는 그다지 감소되는 같지는 않다. 이러한 경우엔 거의 수렴한 것이기 때문에 cost function 이상 줄어들지 않는 것이다.

 

문제마다 다르겠지만 gradient descent 수렴하기 위한 iteration 수는 다르다. 어떤 경우에는 30번만에 혹은 3000 어쩌면 300만번 이상 반복이 필요할 수도 있다.

gradient descent 수렴하기 위한 iteration 수를 사전에 알기는 어렵기 때문에 일반적으론 iteration 따른 cost function 그래프를 그려서 수렴하는지 아닌지 판단한다.













또한 현재 gradient descent 수렴하는지 아닌지 알려주는 automatic convergence test 알고리즘이 있다.

알고리즘은 gradient descent 반복하면서  cost값의 감소량이 10^(-3)보다 적게 줄어들었다면 수렴했다고 판단한다.

물론 이러한 방법을 쓰지는 않으며 임계값을 얼마로 설정해야 하는지도 어려운 문제이다.

그래서 일반적으론 그래프를 그리면서 gradient descent 제대로 작동하는지 아닌지 판단한다.











다음으로 gradient descent 제대로 작동하지 않을 어떻게 해야 하는지 알아보자

만약 cost function 그래프가 왼쪽과 같이 나타난다면 이는 gradient descent 제대로 수렴하지 하는 것이다.

이렇게 cost값이 지속적으로 증가되는 경우는 learning rate값이 너무 크기 때문에 최소값에 도달하지 하고 over shooting 현상이 발생하여 나타나는 문제다.

따라서 이러한 문제에 직면하면 learning rate 작은 값으로 사용하면 된다.









다른 예로 cost function 값이 내려갔다가 다시 올라가고, 다시 내려갔다가 올라가는 경우도 있다.

이러한 경우에도 learning rate값을 작게 해주면 된다.

여기선 수학적으로 증명하지는 않지만, learning rate값이 적절하게 작으면 cost function 지속적으로 감소된다고 한다.

따라서 cost function 감소되지 않으면 learning rate값이 매우 크다는 것이다. 그렇다고 해서 learning rate 매우 작게 하는 것도 문제가 된다. 왜냐하면 gradient descent 수렴하는데 너무 많은 시간이 걸리기 때문이다.











정리하자면 learning rate값이 너무 작으면 수렴 속도가 느려지고 너무 크면 cost function 감소되지 않아 수렴하지 못할 수도 있다.

또한 너무 경우에도 수렴속도가 느려지는 문제가 발생할 수도 있다.











하지만 대부분의 문제는 cost function iteration 해도 제대로 감소되지 않는 경우이다.

이러한 경우엔 cost function 그래프를 그려서 어떤 현상이 발생했는지 알아보는 것이 좋다.

그리고 gradient descent learning rate 값을 어떤 범위 내의 값으로 사용한다.

0.001, 0.01, 0.1, 1처럼 10배씩 늘려보면서 너무 작은 문제였다면 10배만큼 키워보고 너무 커서 문제였다면 10 줄여보는 것이다.

그래서 cost 값이 빠르게 감소하는 learning rate값을 선택한다.

그러나 실제로 10배씩 늘리고 줄이는 너무 크게 조절하는 거라서 교수님은 3배씩 늘리거나 줄인다고 한다.

이렇게 하면서 가능한 가장 작은 값과 값을 찾는다. 그래서 가장 값에서 조금 작은 값을 선택하거나 가장 작은 값에서 조금 값을 선택한다.

이러한 방법을 사용해서 적절한 learning rate 찾고 gradient descent 작동할 있게 있다.











Feature 간단하게 선택하는 방법, 적절한 feature 선택에 따른 좋은 학습 알고리즘을 만들고 다항 회귀에 대해서 알아본다.













값을 예측하는 모델을 만들기 위해 우리는 frontage depth라는 2개의 feature 사용해서 가설 h(x) 만들었다.

Frontage depth feature 사실 집의 면적을 계산하기 위한 너비와 높이를 나타내는 feature이다.

Frontage depth 곱하면 집의 면적을 나타내는 area라는 feature 표현할 있다.

이렇게 되면 2개의 feature 사용하는 것이 아니라 하나의 feature 사용해서 간결한 모델을 만들 있다.

문제와 Feature 특성을 제대로 이해하여 feature 곧이 곧대로 사용하는 것보다 현재 feature들을 이용해서 새로운 feature 정의하고 나은 모델을 만들 있는 것이다.












Feature 선택하는 것과 다항회귀는 밀접한 관련이 있다.

위와 같은 data set 있을 어떤 모델을 사용하는 것이 data set 나타낼 있을까?

여러 개가 있겠지만 봐도 직선은 그다지 좋은 모델은 아닌 같다.

그러면 곡선 형태의 2차식이 적절할까?












2차식 모델을 사용하면 특정 데이터를 나타낼 수는 있겠지만 2차식의 특징에 따라 언젠가는 함수가 내려가게 된다.

집이 커지는데 가격이 떨어지는 것은 말이 안되기 때문에 2차식 역시 좋은 모델이 없다.














만약 우리가 3차식 모델을 사용한다면 data set 나타낼 있을 것이다.

집이 커지는데 가격이 오히려 내려가는 2차식을 사용했을 나타났던 문제도 해결되었다.

그러면 3차식 모델을 사용해서 data 표현할 있는 모델을 어떻게 만들 있을까?

아이디어는 기존의 다중 선형회귀 구조를 이용하는 것이다.













우리가 사용하는 feature size하나밖에 없으니까 이것을 제곱, 세제곱하는 방식으로 치환하여 선형회귀 식과 같아지도록 만드는 것이다.

이렇게 되면 feature 범위가 매우 커지기 때문에 서로 비슷한 범위를 가지도록 feature scaling 적용하는 것이 매우 중요해진다.












해당 data set 나타내는 모델을 만들기 위해 우리는 2차식 모델을 사용했을 어떤 문제가 있었고 문제를 해결하기 위해 3차식 모델을 사용해보았다.

3차식 모델을 사용하지 않고 다른 방법으로 feature 다루는 것을 알아보자

data 모양을 제곱근 함수의 관점에서 바라보고 제곱근 함수를 사용하는 것이다. 제곱근 함수는 감소하지 않고 천천히 증가하는 모양을 띄기 때문에 2차식의 문제도 해결할 있고 data set 나타내는 모델이 있다.

이렇게 같은 문제를 서로 다른 관점에서 바라보면서 좋은 feature 가지고 나은 모델을 만들 있다.



































Comments