Coursera Machine Learning: Regression Final ( week 4 ~ 6 )
WEEK 4
이번 주의 목표는 4가지이다.
1. overfit에 대한 이해
2. overfitting을 피하기 위한 Ridge Regression
3. RSS 함수를 통한 Ridge Regression Optimizing
3-1. set the gradient 0
3-2. gradient descent
4. validation set을 통한 람다 구하기
1. overfit에 대한 이해
어떻게 trade-off 관계에서 sweet spot 이라는 점에 도달해 가장 좋은 퍼포먼스를 낼 수 있을까?
overfit 은 bias 와 variance 간의 관계를 잘 조절하면 해결 할 수 있다.
함수의 계수가 엄청 크면 overfit하다고 한다.
그렇다면 overfit은 어떻게 해결할 수 있을까?
강의에서는 Ridge Regression을 제시한다.
2. overfitting을 피하기 위한 Ridge Regression
위에서 얘기한 것처럼 예측 함수의 계수가 너무 크면 overfit일 가능성이 크다고 했다.
그래서 cost format 을 아래의 사진처럼 바꿀 수 있다.
measure of fit 은 RSS 를 뜻하고, measure of magnitude of coefficient 는
이제 구하는 법을 알아볼 것이다.
위처럼 어떻게 계수를 모두 더해 측정할 수 있는가에 대해 3가지 방법이 있다.
그 중 제곱하여 더하는 방법을 택해 계산할 것이다.
이제 cost function 의 크기를 조절해가며 최적의 예측 함수를 만들것이다.
위의 람다는 tuning parameter 로 유저가 조절하면서
bias 와 variance 를 조절할 수 있고 또한 overfit도 조절할 수 있다.
위의 그림처럼 람다를 늘려갈수록 여러 input 들의 계수가 줄어들고
나중에는 0으로 수렴하는 것을 볼 수 있다.
너무 큰 람다는 높은 bias 와 낮은 variance
너무 작은 람다는 낮은 bias 와 높은 variance
적절한 람다는 구하는 방법은 마지막에 나온다.
매주 있던 것처럼 두가지 방법으로 적절한 weight를 찾는다.
그래서 cost format 을 아래의 사진처럼 바꿀 수 있다.
measure of fit 은 RSS 를 뜻하고, measure of magnitude of coefficient 는
이제 구하는 법을 알아볼 것이다.
위처럼 어떻게 계수를 모두 더해 측정할 수 있는가에 대해 3가지 방법이 있다.
그 중 제곱하여 더하는 방법을 택해 계산할 것이다.
이제 cost function 의 크기를 조절해가며 최적의 예측 함수를 만들것이다.
위의 람다는 tuning parameter 로 유저가 조절하면서
bias 와 variance 를 조절할 수 있고 또한 overfit도 조절할 수 있다.
위의 그림처럼 람다를 늘려갈수록 여러 input 들의 계수가 줄어들고
나중에는 0으로 수렴하는 것을 볼 수 있다.
너무 큰 람다는 높은 bias 와 낮은 variance
너무 작은 람다는 낮은 bias 와 높은 variance
적절한 람다는 구하는 방법은 마지막에 나온다.
3. RSS 함수를 통한 Ridge Regression Optimizing
매주 있던 것처럼 두가지 방법으로 적절한 weight를 찾는다.
Method 1 : Set the gradient 0 ( Ridge closed-form solution )
위처럼 cost function을 행렬로 미분을 표현하고 그 값을 0과 같다는 식을 풀면된다.
중요한 것은 위의 단위 행렬인 I 가 괜히 있는 것이 아니라는 것이다.
자세한 것은 전 게시글에 있다.
Method 2 : Gradient descent
위 그림에서 중요한 것은 -2n*lanbda 이다.
그리고 왼쪽 그래프를 보면 기본 Least Square와 Ridge Regression 의 Gradient descent를
비교한 그래프가 있다.
-2n*lanbda 에 의해 처음에 조금 작아졌다가 RSS의 미분 값에 의해 다시 커지는 것을 볼 수 있다.
4. validation set을 통한 람다 구하기
위 그림처럼 validation set을 통해 람다를 구한다는 것을 알 수 있다.
그럼 어떻게 validation set을 이용할 수 있을까?
대부분 k-fold cross validation 을 사용한다.
예를 들어, 5-fold cross validation을 한다고 할 때, 첫번째 블록을 valid set으로 둔 w(hat)lambda(1) 두번째, 세번째, .. , 다섯번째까지를 모두 구해 5로 나는 평균 error 값을
람다별로 비교 후 그 error 값이 가장 작은 람다가 최적의 람다이다.
WEEK 5
이번 주의 목표는 4가지이다.
내용이 워낙 방대해서 간단히만 요약해야겠다.
1. Feature selection
1-1. All subset
1-2. Greedy Algorithm
1-3. Regularize
1-1. All subset
1-2. Greedy Algorithm
1-3. Regularize
2. Lasso cost
3. Setting the stage for solving Lasso
3-1. Coordinate descent
3-2. Normalizing features
3-3. Coordinate descent for unregularized regression
1. Feature selection
Method 1. All subset
직역하면 그냥 모든 경우의 수를 계산해서 가장 작은 값을 찾아내는 방법이다.
Method 2. Greedy Algorithm
탐욕 알고리즘은 가장 좋은 퍼포먼스를 보인 input 을 차례대로 갖는 것이다.
가장 좋은 퍼포먼스란 가장 낮은 에러율을 보이는 것이다.
첫번째 방법은 모든 subset을 다 계산하기 때문에 오래 걸리지만
탐욕 알고리즘은 매우 빠르다.
그렇다고 RSS가 부정확하지 않고 위처럼 나중에는 결국 같은 값을 갖게 된다.
위 그래프처럼 feature가 많아짐에 따라 error가 줄고 있는데
어느순간부터 그만큼 overfitting 도 증가하고 있다고 할 수 있다.
그렇다면 언제까지 feature selection을 해야하는가?
그건 또 validation 과정을 통해 해결해야한다.
Method 3. Regularize
Lasso Regression의 cost 함수는 위와 같다.
Ridge Regression과 다른 점이라면 계수 계산이 다르다.
Ridge Regression은 L2 Norm 이었고 Lasso Regression 은 L1 Norm이다.
L1 Norm 은 그냥 절대값해서 더하는 것이다.
이제는 람다를 증가할때마다 어떻게 계수가 변하는 지 보자.
Ridge Regression의 L1 Norm 보다는 확실히 다르다는 것을 알 수 있다.
람다를 조금만 올려도 금방 계수들이 0으로 수렴한다.
Ridge는 엄청 중요한 feature인데도 람다를 조금만 올려도 비슷해진다.
하지만 Lasso는 중요한 feature이면 그만큼 0으로 수렴하는 속도가 느리다.
즉, Lasso 는 weight 에 신경을 많이 쓴 방법이라고 할 수 있겠다.
2. Lasso cost
원래 강의에서는 Ridge 에 관해 cost 의 그래프를 그리고 그랬지만 이번에는
요약이므로 그냥 Lasso 에 관한 설명만 줄여서 하겠다.
w0과 w1이 있을 때, lasso 의 cost 함수를 나타낸 식이다.
그 중 보라색 박스 안에 있는 L1 Norm 에 관해 그래프를 그린것이다.
빨간 점이 Least Square 이고 최적점이다.
그리고 위 그림은 강의에서 cost 함수의 그래프가 람다가 증가함에 따라 어떻게 변하는지
동영상으로 보여준 것을 스크린 샷을 찍은 것이다.
되도록이면 강의에서 저 동영상을 봤으면 좋겠다.
가장 눈에 띄는 변화는 w1 이 시작과 동시에 0으로 수렴해버리고 나중에는 (0,0)으로 수렴한다.
3. Setting the stage for solving Lasso
Aside 1 : Coordinate descent
Gradient descent처럼 최적화 방법 중 하나로,
예를 들어, w0과 w1을 최적화하고 싶을 때,
w1을 고정시키고 최적의 w0를 찾는다.
다시 w0을 고정시키고 최적의 w1을 찾는다.
위 과정을 수렴할때까지 계속 반복한다.
Gradient descent와 다른 점은 step size가 없다는 것이다.
Lasso 를 수행할 때 효과적이다.
Aside 2 : Normalizing features
말 그대로 feature들을 정규화하는 것이다.
정규화하는 방법이 여러 있겠지만 예를 들면, 모든 점들을 0과 1사이로 둘 수도 있다.
Aside 3 : Coordinate descent for unregularized regression (for normalized feature)
위와 같이 RSS(w) 를 미분하고 정리한것이다.
여기서 미분의 개념을 잘 알고 있어야한다.
미분은 dy/dx 는 x가 y에 미치는 영향을 나타낸다고 할 수 있다.
따라서 위 식에서 미분은 Lasso 에서 wj 가 RSS에 미치는 영향에 대해 알고 싶은 것이다.
마지막에 있는 -2pj + 2wj 를 꼭 알고 있어야 optimizing 과정을 이해하기 쉽다.
첫번째 식은 wj 가 RSS에 미치는 영향은 람다와 같다는 것을 식으로 표현했다.
두번째는 0과 같다. 즉, 영향이 없다.
세번쨰는 -람다와 같다고 할 수 있다.
이것만 보고는 알 수 없을 것이다.
강의를 듣고 내가 그냥 중요하다고 생각한것만 상기시키기 위해 작성하는 것이기 때문에
정확한 내용을 숙지하고 싶다면 강의를 듣는 것을 추천한다.
week 6
마지막 주는 Local fit에 대해 공부한다.
이 때까지 배운 Ridge , Lasso 는 모든 좌표에서 fit을 수행했지만
이번에는 부분 부분에 대한 fit에 대해 수행하는 것을 알아볼 것이다.
이번 주의 목표는 2가지이다.
1. knn Algorithm
2. Kernel Regression
1. knn Algorithm
위에서 보는 것처럼 거리를 통해 예측값을 결정하는 것이다.
예를 들면, 24평이 1억이니까 25평은 1억 2천 정도 되겠지 하는 좌표 거리를 통해 가격을 가늠하는 것이다.
거리 공식은 scaled Euclidean distance 를 사용한다.
위 그림은 두 xj 와 xq 의 모든 features 들의 거리를 재어 distance 를 계산하는 것이다.
위는 knn의 알고리즘을 나타낸 것이다.
배열 리스트를 이용해 가까운 거리의 원소를 sort하는 느낌이다.
이제는 가중치를 부여하는 knn에 대해 알아보자.
위처럼 가까운 값 y값에 대해 가중치를 다르게 부여해서 y값을 예측하는 구조이다.
가까운 값에 더 많은 가중치를 준다.
그럼 거리만큼 가중치를 어떻게 주어야 할까?
여기서 kernel 함수들이 필요하다.
여기서 우리는 가우시안 커널 함수를 이용할 것이다.
위와 같이 커널 함수를 이용해 가중치를 적절히 사용할 수 있다.
위 그래프를 잘 이해해야 커널 회귀를 할 때 헷갈리지 않고 잘 할 수 있다.
모든 점에 대해 위와 같은 수행을 하는데
빨간점 차례라고 가정하면,
k개의 Nearest Neighbors를 구하고 그 경계를 노란색으로 그린다.
그리고 k개의 평균을 구한 값이 초록색 점이다.
위와 같은 과정을 모든 점에 대해 수행하면 위처럼 초록색 선이 그려진다.
하지만 위 그래프처럼 discontinuities 라는 문제가 발생한다.
즉, 선이 끊기면서 값들이 수직상승하거나 수직하강하는 점이 있다.
2. Kernel Regression
knn에 weight를 부여하는 regression을 kernl regression이라고 한다.
하지만 knn에서 본 weight는 가장 가까운 셋 (Nearst Neighbors)에게만 부여됐다면,
kernel regression은 모든 트레이닝 셋에 weight를 부여한다.
커널 함수를 사용할 때는 2가지에 주의해야한다.
첫번째는 어떤 커널 함수를 사용할 것 인가?
두번째는 어떤 bandwidth lambda 를 사용할 것인가?
두 가지 중에 람다를 무엇으로 할 지가 굉장히 중요하다.
람다는 전에 공부했던 것과 마찬가지로 bias-variance trade-off를
유의해서 조절해야한다.
위처럼 낮은 람다는 overfitting 을 유발하고 큰 람다는 oversmooth를 유발한다.
다시 쓰지만 그렇다면 람다는 어떻게 정하는가?
역시 cross validation 을 이용하거나 validation set을 이용한다.
댓글
댓글 쓰기