새로운 반달 데이터셋을 만들고 수정된 커널 PCA 구현을 사용하여 1차원 부분 공간에 투영해 보죠.
>>> X, y = make_moons(n_samples=100, random_state=123)
>>> alphas, lambdas = rbf_kernel_pca(X, gamma=15, n_components=1)
새로운 샘플을 투영하는 코드를 구현하기 위해 반달 데이터셋의 26번째 포인트가 새로운 데이터 포인트 x'라고 가정하겠습니다. 이 포인트를 새로운 부분 공간으로 투영하는 작업입니다.
>>> x_new = X[25]
>>> x_new
array([ 1.8713187 , 0.00928245])
>>> x_proj = alphas[25] # 원본 투영
>>> x_proj
array([ 0.0788])
>>> def project_x(x_new, X, gamma, alphas, lambdas):
... pair_dist = np.array([np.sum(
... (x_new-row)**2) for row in X])
... k = np.exp(-gamma * pair_dist)
... return k.dot(alphas / lambdas)
다음 코드를 실행하여 원본 투영을 재현해 보겠습니다. project_x 함수를 사용하면 새로운 데이터 샘플도 투영할 수 있습니다. 코드는 다음과 같습니다.
>>> x_reproj = project_x(x_new, X,
... gamma=15, alphas=alphas, lambdas=lambdas)
>>> x_reproj
array([ 0.0788])