Given data X and the number of principal components k, compute the reconstruction error (mean squared error) when projecting X onto its top-k principal components and reconstructing back.
import numpy as np
def pca_reconstruction_error(X: np.ndarray, k: int) -> float:
# Center the data
mean = X.mean(axis=0)
X_centered = X - mean
# Compute SVD
U, S, Vt = np.linalg.svd(X_centered, full_matrices=False)
# Project onto top-k components and reconstruct
V_k = Vt[:k]
X_projected = X_centered @ V_k.T
X_reconstructed = X_projected @ V_k
# Compute mean squared error
error = np.mean((X_centered - X_reconstructed) ** 2)
return float(error)sum(S[k:]^2) / (n * d).