본문 바로가기

2019년 혁신성장 청년인재 집중양성(빅데이터)/[COURSERA] Machine Learning Stanford Uni

[week2] Computing Parameters Analytically

 

1. Normal equation은 단 한번의 계싼으로 최적의 값을 구한다.

 

1. 비용함수에서의 세타가 실수일 때, 비용함수의 최소값을 구하는 방법은 미분을 하고 그 미분이 0이 될 때의 값을 찾는 것이었다.

2. 그렇다면 세타가 n+1의 파라미터 백터라면, 비용함수 j의 최소값을 어떻게 구해야 할까.

3. 비용함수 j를 편미분 하는 방법이 있다. 각가 모든 파라미터 세타 j에 따라서 미분하고 각각이 0이 되게 하면 모든 세타에 대하한 값을 구할 수 있다.

4. 애초에 비용함수가 하나의 함수이기 때문에 미분을 통해 최소 값을 찾을 수 있는 것은 당연하다. 하지만 오래걸린다. 해보지는 않을 거지만, 일단 뭐가 필요한지에 대해 알 필요는 있다.

 

 

1. m이 4이고, n이 4인  데이터 셋이 있고, 알고자하는 값 y가 있다. 이것을 행렬로 바꿔 표현하면 위와 같고, 우리가 풀려는 식은 빨간 박스의 식이다. 저 식을 미분하면 최적의 세타(가설)을 찾을 수 있다. 

 

2. 모델을 만들기 위해서 m개의 벡터 x를 m*(n+1)차원의 행렬로 바꿔 주어야 한다.

 

1. 우리가 구하는 것은 비용함수의 최소값인데 그것을 구하는 공식이 파란박스로 표시된 세타에 대한 공식이다.

2. 이 공식은 행렬 X의 전치행렬과 행렬 X의 곱을 한 행렬의 역행렬에, 다시 행렬 X의 전치행렬을 곱한 뒤, y를 곱해주는 공식이다. 

 

3. noraml equation을 사용하면 feature scaleing은 필요하지 않다.

 

4. 행렬 X는 m*(n+1)의 행렬, 전치행렬은 (n+1)*m의 행렬의 곱은 m*m의 행렬이 나오게 된다. 이 행렬의 역행렬에 X의 전치행렬을 곱하면 다시 m*(n+1)행렬이 나오고 n+1차원의 벡터 y와 곱하면 m*1 m 차원의 벡터가 나오는데 그것이 세타의 값이다. 어떤 의미를 가지고 있는지는 잘 모르겠지만... 흠 일단 알자.

 

 

 

1. 경사하강의 장점은 알파를 정해야 하는 것익, 많은 반복이 필요하다는 것이다. 하지만 장점으로는 많은 피쳐수를 가지고 있다라도 잘 작동한다.

2. normal equating의 장단점은 알파를 결정할 필요도, 반복도 필요가 없다는 장점이 있다. 단점으로는 n이 커지면 느려진다. 빅오표기법으로 ㅍ시하면 O의 n의 3승으로 차원이 하나씩 커질 때마다 세제곱으로 반복하는 횟수는 증가하게 된다.

 

3. 그렇기 떄문에 n이 크다면 경사하강법을, 작다면 nomal equation을 쓰는 것이 낫다. n이 10만보다 크다면 요즘 컴퓨터로는 힘드니, 경사 하강법을 ㅆ느느 것이 좋을 것이다.

4. 문제가 어떻게, 얼마나 많은 피쳐의 수를 가지고 있냐에 따라 적절한 알고리즘을 선택해야 한다.

 

1. 만약 normal equation에서 X의 전치행렬과 X의 곱의 역행렬이 없다면? 즉 singular거나 degenerate라면?

 

2. 옥타브에서는 역행렬을 구하는데 두 가지 pinv와 inv를 구해주는데  pinv는 psuedo inv라고 한다. 어찌 됐는 없어도 역행렬을 구할 수 있는 것이다.

 

3. 여기서 내가 생각하던 문제의 답을 조금 주신다. 피쳐링을 통해서 새로운 피쳐를 만들었고, 피쳐와 그로부터 파생된 새로운 피쳐 모두를 사용하여 가설을 새울 때, 그 행렬의 역행렬은 존재하지 않는다. 즉 파생피쳐나 원본 피쳐를 하나 지우면 역행렬이 가능해진다.

 

4. 또 m보다 많은 피쳐 n을 가지고 만든 행렬의 전치행렬과의 곱은 역행렬이 없을 수 있다. 이 경우는 피쳐를 지우거나 regularization을 사용하면 된다.

 

5. 이런 경우는 잘 ㅇ벗다.

 

6. 또 pinv가 있으니 걱정하지 말라.