Skip to content
This repository has been archived by the owner on Jul 24, 2024. It is now read-only.

Inaccurate porting of covariance vs naive method #82

Open
JamesYang007 opened this issue Jan 8, 2024 · 0 comments
Open

Inaccurate porting of covariance vs naive method #82

JamesYang007 opened this issue Jan 8, 2024 · 0 comments

Comments

@JamesYang007
Copy link

JamesYang007 commented Jan 8, 2024

if X.shape[1] > X.shape[0]:
# the glmnet docs suggest using a different algorithm for the case
# of p >> n
algo_flag = 2
else:
algo_flag = 1

glmnet actually does a slightly different check than just a "n" vs "p" comparison like this. It invokes method 1 (covariance method) if p <= 500. The covariance method keeps track of a matrix of covariances C(i,j) for every feature i and every active feature j. And under the hood, C is allocated as a pxp matrix (even though we use much less memory than that usually); this was done out of simplicity because it's very hard to write clever data structures in Fortran. So even when n >> p, if p is also large, this is not a viable default option on most machines.

Anyways, I'd suggest changing to

if X.shape[1] <= 500:
    algo_flag = 1
else:
    algo_flag = 2
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant