Skip to content

Optimized CV method (kESI's code)#144

Merged
asiaszmek merged 2 commits intoNeuroinflab:masterfrom
abukaj:cv
Aug 4, 2023
Merged

Optimized CV method (kESI's code)#144
asiaszmek merged 2 commits intoNeuroinflab:masterfrom
abukaj:cv

Conversation

@abukaj
Copy link
Copy Markdown
Member

@abukaj abukaj commented Aug 3, 2023

I preserved most of the original code as a regression test. For n=100 we have 8 (mean wall time) - 60 fold speedup (CPU time) with backward compatibility:

In [53]: %timeit k100.cross_validate()                                                                                                                                                                                                                                         
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
909 ms ± 7.45 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [54]: %timeit k100.cross_validate(regression_test=True)                                                                                                                                                                                                                     
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
R, lambda : 1.0 2.6101572156825332e-12 OLD
max diff : 0.0003688931465148926
new min, old min : 0.08087466148709524 0.08084992462819085
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
R, lambda : 1.0 2.6101572156825332e-12 OLD
max diff : 0.0003688931465148926
new min, old min : 0.08087466148709524 0.08084992462819085
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
R, lambda : 1.0 2.6101572156825332e-12 OLD
max diff : 0.0003688931465148926
new min, old min : 0.08087466148709524 0.08084992462819085
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
R, lambda : 1.0 2.6101572156825332e-12 OLD
max diff : 0.0003688931465148926
new min, old min : 0.08087466148709524 0.08084992462819085
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
R, lambda : 1.0 2.6101572156825332e-12 OLD
max diff : 0.0003688931465148926
new min, old min : 0.08087466148709524 0.08084992462819085
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
R, lambda : 1.0 2.6101572156825332e-12 OLD
max diff : 0.0003688931465148926
new min, old min : 0.08087466148709524 0.08084992462819085
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
R, lambda : 1.0 2.6101572156825332e-12 OLD
max diff : 0.0003688931465148926
new min, old min : 0.08087466148709524 0.08084992462819085
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
R, lambda : 1.0 2.6101572156825332e-12 OLD
max diff : 0.0003688931465148926
new min, old min : 0.08087466148709524 0.08084992462819085
7.79 s ± 677 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


In [55]: %time k100.cross_validate(regression_test=True)                                                                                                                                                                                                                       
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
R, lambda : 1.0 2.6101572156825332e-12 OLD
max diff : 0.0003688931465148926
new min, old min : 0.08087466148709524 0.08084992462819085
CPU times: user 50 s, sys: 2.33 s, total: 52.3 s
Wall time: 6.72 s
Out[55]: (1.0, 2.6101572156825332e-12)

In [56]: %time k100.cross_validate()                                                                                                                                                                                                                                           
No lambda given, using defaults
Cross validating R (all lambda) : 1.0
R, lambda : 1.0 2.6101572156825332e-12
CPU times: user 897 ms, sys: 130 µs, total: 898 ms
Wall time: 897 ms
Out[56]: (1.0, 2.6101572156825332e-12)

@abukaj
Copy link
Copy Markdown
Member Author

abukaj commented Aug 3, 2023

The actual improvement may be greater, as k.update_R() for n=100 takes 6s of CPU time (3s of Wall time)

@asiaszmek asiaszmek merged commit 1393ac9 into Neuroinflab:master Aug 4, 2023
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.

2 participants