Skip to content

Commit

Permalink
added new footnote
Browse files Browse the repository at this point in the history
  • Loading branch information
FlyingWorkshop committed Nov 18, 2024
1 parent a364bc7 commit 6d2da64
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 11 deletions.
20 changes: 11 additions & 9 deletions paper.bib
Original file line number Diff line number Diff line change
Expand Up @@ -135,15 +135,17 @@ @article{gans
}


@misc{Julia,
title={Julia: A Fast Dynamic Language for Technical Computing},
author={Jeff Bezanson and Stefan Karpinski and Viral B. Shah and Alan Edelman},
year={2012},
eprint={1209.5145},
archivePrefix={arXiv},
primaryClass={cs.PL},
doi={10.48550/arXiv.1209.5145},
url={https://doi.org/10.48550/arXiv.1209.5145}
@article{Julia,
title={Julia: A fresh approach to numerical computing},
author={Bezanson, Jeff and Edelman, Alan and Karpinski, Stefan and Shah, Viral B},
journal={SIAM {R}eview},
volume={59},
number={1},
pages={65--98},
year={2017},
publisher={SIAM},
doi={10.1137/141000671},
url={https://epubs.siam.org/doi/10.1137/141000671}
}

@BOOK{GLM,
Expand Down
4 changes: 3 additions & 1 deletion paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ Principal component analysis (PCA) [@PCA1; @PCA2; @PCA3] is popular for compress

EPCA is used in reinforcement learning [@Roy], sample debiasing [@debiasing], and compositional analysis [@gans]. Wider adoption, however, remains limited due to the lack of implementations. The only other EPCA package is written in MATLAB and supports just one distribution [@epca-MATLAB]. This is surprising, as other Bregman-based optimization techniques have been successful in areas like mass spectrometry [@spectrum], ultrasound denoising [@ultrasound], topological data analysis [@topological], and robust clustering [@clustering]. These successes suggest that EPCA holds untapped potential in signal processing and machine learning.

The absence of a general EPCA library likely stems from the limited interoperability between fast symbolic differentiation and optimization libraries in popular languages like Python and C. Julia, by contrast, uses multiple dispatch which promotes high levels of generic code reuse [@dispatch]. Multiple dispatch allows `ExpFamilyPCA.jl` to integrate fast symbolic differentiation [@symbolics], optimization [@optim], and numerically stable computation [@stable_exp] without requiring costly API conversions. As a result, `ExpFamilyPCA.jl` delivers speed, stability, and flexibility, with built-in support for most common distributions (§ [Supported Distributions](#supported-distributions)) and flexible constructors for custom distributions (§ [Custom Distributions](#supported-distributions)).
The absence of a general EPCA library likely stems from the limited interoperability between fast symbolic differentiation and optimization libraries in popular languages like Python and C. Julia, by contrast, uses multiple dispatch which promotes high levels of generic code reuse [@dispatch]. Multiple dispatch allows `ExpFamilyPCA.jl` to integrate fast symbolic differentiation [@symbolics], optimization [@optim], and numerically stable computation [@stable_exp] without requiring costly API conversions.[^1] As a result, `ExpFamilyPCA.jl` delivers speed, stability, and flexibility, with built-in support for most common distributions (§ [Supported Distributions](#supported-distributions)) and flexible constructors for custom distributions (§ [Custom Distributions](#supported-distributions)).

[^1]: Symbolic differentiation is essential for flexibly specifying the EPCA objective (see [documentation](https://sisl.github.io/ExpFamilyPCA.jl/stable/math/objectives/#2.-Using-F-and-f)). While numeric differentiation is faster, symbolic differentiation is performed only once to generate a closed form for the optimizer (e.g., `Optim.jl` [@optim]), making it more efficient in practice. `LogExpFunctions.jl` (which implements ideas from @stable_exp) mitigates overflow and underflow in exponential and logarithmic operations.

## Principal Component Analysis

Expand Down
2 changes: 1 addition & 1 deletion src/epca.jl
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ function fit!(
steps_per_print,
epca.options
)
epca.V[:] = V # TODO: delete this line?
epca.V[:] = V
return A
end

Expand Down

0 comments on commit 6d2da64

Please sign in to comment.