[R] Lasso 와 Ridge 그리고 Elastic net 이제 잊지말자
대체 왜 글씨색이 안바뀌는거지...
유전체 데이터 기반 신체적 나이예측 프로젝트를 마무리하고 부족한 부분을 정리헀다.
나는 바보같이 새롭게 Ridge와 Lasso를 정리하고 새롭게 Elastic net 모델을 구현하는 걸 찾고 있었다. 분명히 다 배웠던 건데 내가 놓친게 있었다.
1. Ridge Regression: Ridge Regression는 알파가 0일 때의 Elastic Net이다. Ridge는 모든 변수를 포함하지만, 일부 계수를 축소하여 복잡성을 줄인다.
기본 선형모델을 사용하다 보면 overfitting이 발생할 수 있다. Overfitting된 경우 데이터에 매우 적합되어 극단적으로 오르락내리락하는 그래프가 생성되며, 이를 표현하는 선형 회귀의 계수 값이 매우 크게 (예를 들면 ) 나타난다. 이렇게 Variance가 큰 상황을 막기 위해, 계수 자체가 크면 페널티를 주는 수식을 추가 한 것이 ridge regression이다.과 같이 차원이 큰 파라미터를 사람이 인위적으로 소거할 수도 있지만, ridge regression은 오차를 최소화하는 함수에 페널티를 줌으로써 보다 부드럽게 계수를 선택하는 차이가 있다. Ridge regression은 기본 선형 모델을 regularize 하여 좀 더 좋은 performance를 내기 위해 시도해볼 수 있는 아주 기본적인 기법이다.
2. Lasso Regression: Lasso는 알파가 1일 때의 Elastic Net이다. Lasso는 변수 선택이 가능하며, 일부 계수를 완전히 0으로 만들어 해당 변수를 제외한다.
라쏘는 제약조건이 절대값이기 때문에 마름모꼴의 형태로 나타난다. 라쏘회귀의 경우 최적값은 모서리 부분에서 나타날 확률이 릿지에 비해 높기 때문에 몇몇 유의미하지 않은 변수들에 대해 계수를 0에 가깝게(혹은 0으로) 추정해 feature selection의 효과를 가져온다. 라쏘는 파라미터의 크기에 관계 없이 같은 수준의 regularization을 적용하기 떄문에 작은 값의 파라미터를 0으로 만들어 해당 변수를 모델에서 삭제하고, 따라서 모델을 단순하게 만들어주고 해석을 용이하게 한다.
3. Elastic Net: Elastic Net은 알파 값이 0과 1 사이일 때 이다. 이 경우 L1 규제(Lasso)와 L2 규제(Ridge)가 혼합된 형태로 작동한다. 알파값에 따라서 둘 중 어느 것에 더 가중치를 둘지 결정할 수 있다.
Ridge, Lasso, Elastic Net 은 모두 alpha값에 따라서만 구분된다는 것. 베이스는 똑같다는 것.
이걸 잊고 3개가 다른 모델인줄 알고 따로따로 찾아본건... 대체... ㅠㅠㅠ 다 공부한건데... ㅠㅠㅠ
그래도 이렇게 또 배우는 구나! ^^* 이젠 절대 안잊어버릴듯
Ridge를 학습시켜서 최적의 MSE 를 보려는 코드이다. 여기서 Alpha값만 바꾸면 Lasso,Elastic net도 확인해볼 수 있다.
아래는 Cross-Validation을 통해 최적의 lambda를 찾아가는 과정. 이걸 모르고 일일이 반복문으로 다 찾아보려고 했던 나도 전설의 레전드. 너무 예쁘다