Skip to content

Commit

Permalink
update url rot
Browse files Browse the repository at this point in the history
  • Loading branch information
FlyingWorkshop committed Sep 9, 2024
1 parent d5e22b9 commit f7e31bd
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# ExpFamilyPCA.jl

[![Build Status](https://github.com/FlyingWorkshop/ExpFamilyPCA.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/FlyingWorkshop/ExpFamilyPCA.jl/actions/workflows/CI.yml?query=branch%3Amain)
[![Dev-Docs](https://img.shields.io/badge/docs-latest-blue.svg)](https://flyingworkshop.github.io/ExpFamilyPCA.jl/dev/)
[![Build Status](https://github.com/sisl/ExpFamilyPCA.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/sisl/ExpFamilyPCA.jl/actions/workflows/CI.yml?query=branch%3Amain)
[![Dev-Docs](https://img.shields.io/badge/docs-latest-blue.svg)](https://sisl.github.io/ExpFamilyPCA.jl/dev/)

**ExpFamilyPCA.jl** is a Julia package for performing [exponential principal component analysis (EPCA)](https://papers.nips.cc/paper_files/paper/2001/hash/f410588e48dc83f2822a880a68f78923-Abstract.html). ExpFamilyPCA.jl supports custom objectives and includes fast implementations for several common distributions.

## Documentation

For detailed documentation on each function and additional examples, please refer to the [documentation](https://github.com/FlyingWorkshop/ExpFamilyPCA.jl).
For detailed documentation on each function and additional examples, please refer to the [documentation](https://github.com/sisl/ExpFamilyPCA.jl).

## Installation

Expand Down Expand Up @@ -67,7 +67,7 @@ $$
\frac{1}{2\pi} \int_{-\pi}^{\pi} \Bigg[ \frac{P(\omega)}{\hat{P}(\omega)} - \log \frac{P(\omega)}{\hat{P}{\omega}} - 1\Bigg] d\omega
$$

effeciently in Julia even though the two are [equivalent](https://flyingworkshop.github.io/ExpFamilyPCA.jl/dev/math/).
effeciently in Julia even though the two are [equivalent](https://sisl.github.io/ExpFamilyPCA.jl/dev/math/).

<!-- TODO: update the link to show the gamma math -->

Expand All @@ -79,7 +79,7 @@ ExpFamilyPCA.jl includes 10 constructors for custom distributions. All constrcut
2. $g$ is the **link function**. It is the derivative of the log-partition $\nabla_\theta G(\theta) = g(\theta)$ and the inverse of the derivative of the convex conjugate of the log-parition $g = f^{-1}$.
3. $F$ is the **convex conjugate** (under the [Legendre transform](https://en.wikipedia.org/wiki/Legendre_transformation)) of the log-partition $F = G^*$.
4. $f$ is the **derivative of the convex conjugate** $\nabla_x F(x) = f(x)$ and the inverse of the link function $f = g^{-1}$.
5. $B_F(p \| q)$ is the [**Bregman divergence**](https://flyingworkshop.github.io/ExpFamilyPCA.jl/dev/bregman/) induced from $F$.
5. $B_F(p \| q)$ is the [**Bregman divergence**](https://sisl.github.io/ExpFamilyPCA.jl/dev/bregman/) induced from $F$.

For the Poisson distribution, these terms take the following values.

Expand Down
12 changes: 6 additions & 6 deletions paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,16 @@ Exponential family PCA was introduced by @EPCA and several papers have extended

## Exponential Family PCA

PCA can be interpreted as a Gaussian denoising procedure (see discussion in the [documentation](https://flyingworkshop.github.io/ExpFamilyPCA.jl/dev/math/epca/#The-Probabilistic-View)). EPCA extends this concept by generalizing PCA to handle noise drawn from *any* exponential family distribution.[^1]
PCA can be interpreted as a Gaussian denoising procedure (see discussion in the [documentation](https://sisl.github.io/ExpFamilyPCA.jl/dev/math/epca/#The-Probabilistic-View)). EPCA extends this concept by generalizing PCA to handle noise drawn from *any* exponential family distribution.[^1]

Before describing the EPCA objective, we introduce the necessary notation:


1. $G$ is the **log-partition function** of some exponential family distribution.
2. $g$ is the **link function** and the derivative of $G$. Since $G$ is strictly convex and continuously differentiable, $g$ is invertible.
3. $F$ is the **convex conjugate** or dual of $G$. A deeper discussion of duality and the Legendre transform is provided in the [documentation](https://flyingworkshop.github.io/ExpFamilyPCA.jl/dev/math/bregman/#The-Legendre-Transform-and-Parameter-Duality).
3. $F$ is the **convex conjugate** or dual of $G$. A deeper discussion of duality and the Legendre transform is provided in the [documentation](https://sisl.github.io/ExpFamilyPCA.jl/dev/math/bregman/#The-Legendre-Transform-and-Parameter-Duality).
4. $f$ is the derivative of $F$. Since $F$ is the convex conjugate of $G$, its derivative is the inverse link function $f = g^{-1}$.
5. $B_F(p \| q)$ is the [**Bregman divergence**](https://flyingworkshop.github.io/ExpFamilyPCA.jl/dev/bregman/) induced from $F$.
5. $B_F(p \| q)$ is the [**Bregman divergence**](https://sisl.github.io/ExpFamilyPCA.jl/dev/bregman/) induced from $F$.


The EPCA objective is then written
Expand All @@ -66,7 +66,7 @@ $$\begin{aligned}
& & \mathrm{Rank}\left(\Theta\right) \leq \ell
\end{aligned}$$

where $\Theta$ is the natural parameter matrix and both $\epsilon > 0$ and $\mu \in \mathrm{Range}(g)$ are regularization hyperparameters that ensure the optimum is finite. See the [documentation](https://flyingworkshop.github.io/ExpFamilyPCA.jl/dev/math/epca/) for a deeper discussion of the EPCA objective.
where $\Theta$ is the natural parameter matrix and both $\epsilon > 0$ and $\mu \in \mathrm{Range}(g)$ are regularization hyperparameters that ensure the optimum is finite. See the [documentation](https://sisl.github.io/ExpFamilyPCA.jl/dev/math/epca/) for a deeper discussion of the EPCA objective.

[^1]: More generally, the EPCA objective can be induced from any contiuously-differentiable, strictly convex function.

Expand All @@ -92,7 +92,7 @@ X_reconstructed = decompress(poisson_epca, X_compressed)
Y_reconstructed = decompress(poisson_epca, Y_compressed)
```

More details can be found in the [documentation](https://flyingworkshop.github.io/ExpFamilyPCA.jl/dev/api/).
More details can be found in the [documentation](https://sisl.github.io/ExpFamilyPCA.jl/dev/api/).

## Features

Expand Down Expand Up @@ -120,7 +120,7 @@ $$
\frac{1}{2\pi} \int_{-\pi}^{\pi} \Bigg[ \frac{P(\omega)}{\hat{P}(\omega)} - \log \frac{P(\omega)}{\hat{P}{\omega}} - 1\Bigg] d\omega
$$

effeciently in Julia even though the two are equivalent (see [documentation](https://flyingworkshop.github.io/ExpFamilyPCA.jl/dev/math/gamma/)).
effeciently in Julia even though the two are equivalent (see [documentation](https://sisl.github.io/ExpFamilyPCA.jl/dev/math/gamma/)).

There are many equivalent formulations of the EPCA objective and ExpFamilyPCA.jl supports many of them. Some constructors create objects that fit, decompress, and compress faster than others. To provide an example, we show how users can create `PoissonEPCA` using custom constructors. Each custom constructor requires some information about the desired distribution. The table below shows an example of that information for the Poisson distribution.

Expand Down

0 comments on commit f7e31bd

Please sign in to comment.