Skip to content

Use SVD for PCA and fix when channels > observations#3

Open
ethanbb wants to merge 1 commit into
alvarouc:masterfrom
ethanbb:svd-pca
Open

Use SVD for PCA and fix when channels > observations#3
ethanbb wants to merge 1 commit into
alvarouc:masterfrom
ethanbb:svd-pca

Conversation

@ethanbb

@ethanbb ethanbb commented May 29, 2019

Copy link
Copy Markdown

I noticed that the branch of pca_whiten for when NSUB > NVOX, i.e. you have more channels than observations, wasn't giving the expected results. I compared the result for a matrix with NSUB < NVOX with the result when I added dummy channels of all zeros, which should have no effect on the whitened data, and they weren't the same - I believe due to a missing scaling factor somewhere.

Rather than pinpointing exactly where the missing factor was and what it was supposed to be, I decided to just rewrite it using SVD rather than eigendecomposition. I verified the results are the same, except the components are in reverse order since scipy.linalg.svd returns its results starting with the largest singular value. This doesn't require multiplying to get the covariance matrix, and seems to be faster in some cases (based on some light profiling, this is true in the typical case of few features and many observations).

Here's some more information about using SVD for PCA.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant