실습 · 연습문제 2개
좌표 하강법과 soft-thresholding으로 Lasso 풀기 lasso-coordinate-descent
Lasso 목적함수
는 때문에 0에서 미분할 수 없어 닫힌 해가 없다. 그러나 계수 하나만 움직이고 나머지를 고정하면 문제는 1차원이 되고, 해가 닫힌 형태로 나온다. 계수를 하나씩 돌아가며 이 1차원 해로 바꾸는 것이 좌표 하강법(coordinate descent)이다.
두 함수를 완성한다. X는 열마다 평균이 0이라고 가정하고 절편은 다루지 않는다.
1. soft_threshold(z, t) — . 배열에 원소별로 동작해야 한다. 이면 정확히 0이다.
2. lasso_cd(X, y, alpha, n_sweeps=500) — 모든 계수를 0에서 시작해, 매 sweep마다 순서로
로 바꾼다. 는 "번째 특징을 뺀 나머지 모델의 잔차"와 의 상관이다. 이 상관이 보다 작으면 는 정확히 0이 된다. 이것이 Lasso가 특징을 선택하는 방식이다. n_sweeps번 반복한 뒤 w (shape (p,))를 반환한다.
테스트는 다음을 확인한다.
soft_threshold의 값과 정확한 0.- 특징이 직교하는 경우(), 해가 와 같다.
- 이면 모든 계수가 0이다.
- 최적 조건(KKT): 이면 , 이면 .
표준화와 벌점 없는 절편을 포함한 Ridge 회귀 standardized-ridge
함수 fit_ridge(X, y, lam)를 완성해, 원래 단위의 계수 w (shape (p,))와 절편 b (스칼라)를 반환한다. 예측은 X @ w + b다.
모델은 다음 순서로 만든다.
- 각 특징을 학습 데이터의 평균 와 표준편차 (모집단 표준편차,
ddof=0)로 표준화한다: . - 출력을 중심화한다: .
- 표준화된 특징으로 Ridge 해를 구한다.
- 원래 단위로 되돌린다: , .
중심화한 덕분에 절편은 벌점을 받지 않는다. 벌점은 표준화된 계수 에만 걸리므로, 특징의 단위를 바꿔도 예측이 바뀌지 않는다.
테스트는 다음을 확인한다.
lam = 0이면 절편이 있는 보통 최소제곱과 같다.- 한 특징의 단위를 1000배 바꿔도 예측이 같다.
lam이 매우 크면w는 0에 가까워지고b는y의 평균에 가까워진다(절편이 벌점을 받지 않으므로).- 표준화된 공간에서 Ridge의 최적 조건 를 만족한다.
힌트: np.linalg.solve를 쓴다. 역행렬을 직접 만들 필요는 없다.