실습 · 연습문제 2개
RBF kernel ridge 회귀 kernel-ridge
1차원 입력 과 관측 이 있다. RBF 커널
이 정하는 RKHS 에서 정규화된 최소제곱 문제
를 푼다. 표현자 정리에 따라 해는 꼴이고, 계수는
를 풀어 얻는다. 함수 kernel_ridge_predict(x_train, y_train, x_test, ell, lam)를 완성해 x_test의 각 점에서 의 값을 반환한다.
| 인자 | shape | 의미 |
|---|---|---|
x_train |
(N,) |
학습 입력 |
y_train |
(N,) |
학습 관측 |
x_test |
(M,) |
예측할 입력 |
ell |
스칼라 | 길이 척도 |
lam |
스칼라 | 정규화 강도 |
반환값의 shape은 (M,)이다.
테스트는 다음을 확인한다.
- 위 닫힌 형태의 해와 같다.
- 가 아주 작으면 학습 점을 (거의) 지나간다.
- 학습 점에서 멀리 떨어진 곳의 예측은 0에 가깝다. 해가 학습 점을 중심으로 한 커널 함수의 합이기 때문이다.
- 예측은 에 대해 선형이다.
힌트: 역행렬 np.linalg.inv보다 np.linalg.solve가 더 정확하고 빠르다. 쌍별 차이 는 broadcasting으로 한 번에 만든다(7.7장).
주기 격자 위의 미분 행렬 periodic-derivative-matrix
길이 인 주기 구간 을 칸으로 나눈 격자 , 위에서, 함수 의 값 벡터 에 미분 연산자 를 근사하는 행렬 를 만든다. 중심 차분을 쓴다.
주기 경계이므로 인덱스는 을 법으로 돈다. , 이다.
함수 central_diff_matrix(N, L)를 완성해 shape (N, N)인 NumPy 배열을 반환한다.
테스트는 다음을 확인한다.
- 상수 함수의 미분은 0이다.
- 는 반대칭이다(). 연속 미분 연산자가 주기 함수의 내적에 대해 반대칭()인 성질을 물려받는다.
- 인 구간에서도 의 미분을 맞춘다.
- 을 두 배로 하면 오차가 약 4분의 1로 준다(2차 정확도).
힌트: 행렬은 거의 0이고, 행마다 두 원소만 0이 아니다. np.roll(np.eye(N), 1, axis=1)이 어떤 행렬인지 먼저 출력해 본다.