실습 · 연습문제 2개
표준화를 포함한 kNN 회귀 knn-standardized
함수 knn_predict(X_train, y_train, X_test, k)를 완성해, 시험 입력마다 kNN 회귀 예측을 담은 shape (M,) 배열을 반환한다.
- 학습 데이터의 특징별 평균 와 표준편차 (
ddof=0)로 학습 입력과 시험 입력을 모두 표준화한다. 시험 데이터의 통계량을 쓰면 누수다. - 표준화된 공간에서 시험 점마다 모든 학습 점까지의 Euclid 거리를 계산한다.
- 가장 가까운 학습 점 개의
y_train평균을 예측으로 쓴다.
| 인자 | shape |
|---|---|
X_train |
(N, p) |
y_train |
(N,) |
X_test |
(M, p) |
힌트: 거리 행렬은 브로드캐스팅으로 (M, N) 배열 하나로 만들 수 있다. 가장 작은 개의 인덱스는 np.argsort나 np.argpartition으로 찾는다.
테스트는 다음을 확인한다.
k = 1이면 학습 입력에서의 예측이 학습 출력과 같다.k = N이면 모든 예측이y_train의 평균이다.- 한 특징의 단위를 1000배 바꿔도 예측이 같다(표준화했으므로).
- 숫자가 큰 무관한 특징이 있어도 표준화 덕분에 중요한 특징을 쓴다.
- 직접 계산한 작은 예와 같다.
RBF 커널의 random Fourier features random-fourier-features
RBF 커널
은 개의 무작위 특징으로 근사할 수 있다(Rahimi & Recht, 2007). 와 를 에 대해 뽑고
로 두면, 의 기댓값이 정확히 이고, 이 커질수록 오차가 로 줄어든다.
함수 random_fourier_features(X, m, length_scale, seed=0)를 완성해 shape (N, m)의 특징 행렬 Z를 반환한다. X의 shape은 (N, d)다.
- 난수는
rng = np.random.default_rng(seed)하나로 만든다. 같은seed면 같은 특징을 내야 한다. - 같은
seed로 다른 입력 집합을 변환하면 같은 를 써야 한다. 학습 데이터와 시험 데이터를 같은 특징 공간에 놓기 위해서다.ω는(d, m),b는(m,)순서로 뽑는다.
테스트는 다음을 확인한다.
- shape과 재현성.
- 이 RBF Gram 행렬에 가깝고, 특징 수를 늘리면 오차가 줄어든다.
- 길이 척도를 바꾸면 근사하는 커널도 바뀐다.
- 대각 성분 는 평균적으로 에 가깝다.