Replace SVD with QR algorithm for PCA eigendecomposition
TF.js 4.x doesn't have tf.linalg.svd. Use the QR algorithm instead:
iterative QR decomposition on the 128x128 covariance matrix converges
to eigenvalues/eigenvectors. 50 iterations is plenty for this size.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>