1차원 입력에 RBF 커널 k(x,x′)=σf2exp(−(x−x′)2/(2ℓ2))을 쓰는 영평균 GP를 구현한다. 관측은 yi=f(xi)+εi, εi∼N(0,σn2)이다. Ky=K+σn2I로 두면
μ(x∗)=k∗⊤Ky−1y,σ2(x∗)=k(x∗,x∗)−k∗⊤Ky−1k∗,
logp(y∣X)=−21y⊤Ky−1y−21logdetKy−2Nlog2π.
gp_posterior(x_train, y_train, x_test, ell, sf, sn): 시험 입력마다 잠재함수 f의 사후 평균과 분산 (mean, var). 둘 다 shape (M,). 역행렬을 직접 계산하지 말고 Cholesky 분해(np.linalg.cholesky)와 선형계 풀이를 쓴다.
log_marginal_likelihood(x_train, y_train, ell, sf, sn): 위의 로그 주변우도. logdetKy=2∑ilogLii를 쓴다.
입력은 리스트로 올 수도 있으니 np.asarray로 바꾼다. 테스트는 다음을 확인한다. 잡음이 거의 없으면 학습 점을 지나고(보간), 데이터에서 멀어지면 평균은 0, 분산은 σf2로 돌아간다. 주변우도는 다변량 정규분포 N(0,Ky)의 로그 밀도와 같다.