Skip to content

nicolaNovello/CODINE-copula-estimator

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CODINE: Copula Density Neural Estimator

Nunzio A. Letizia, Nicola Novello, Andrea M. Tonello

Official repository of the paper "Copula Density Neural Estimation".

CODINE is a neural copula density estimator that estimates any copula density by maximizing a variational lower bound on the $f$-divergence.

license Hits


📈 Important results from our paper

Please refer to the paper to have a precise description of all the results.

Copula density estimation

The main purpose of CODINE is to estimate the copula density. In the following, we present three results of copula density estimation in three different settings.

Gaussian

Toy scenario

Mixture of Gaussians

Mutual information estimation

CODINE can be adapted to be used as a MI estimator.

Gaussian

Gaussian with asinh transformation

Data generation

Once the copula density is estimated using CODINE, we show how to generate data sampling the estimated copula with Gibbs sampling.

MNIST digits

We show the generated digits and the architecture of the decoder we use for generation.

FashionMNIST

Since the data is generated using a decoder, we compare the data generated feeding the decoder with the sampling of CODINE's estimated copula (referred to as codine generation) and a random sampling of a uniform distribution (random generation).

We compare the generation using different dimensions of the latent space.


💻 How to run the code

Depending on your preferred library for neural implementatins, please refer to the corresponding folder:

  • CODINE_Keras when using Keras (for a fast shortcut, click here)
  • CODINE_PyTorch when using PyTorch (for a fast shortcut, click here)

🤓 General description

The paper presents a copula density estimation method, denoted as CODINE. CODINE is a neural network trained to estimate the copula density (and thus the pdf) associated to any data. By design, it works with pseudo-observations (data in the uniform probability space). It can be used for:

  • Density estimation
  • Dependence measures
  • Mutual information estimation
  • Data generation
  • More...

The copula density is estimated by maximizing the following objective function with respect to $T$:

$$\mathcal{J}_ {f}(T) = \mathbb{E}_ {\mathbf{u} \sim c_{U}(\mathbf{u})}\biggl[T\bigl(\mathbf{u}\bigr)\biggr] - \mathbb{E}_ {\mathbf{u} \sim \pi_{U}(\mathbf{u})}\biggl[f^*\biggl(T\bigl(\mathbf{u}\bigr)\biggr)\biggr] ,$$

where $c_U$ is the copula density and $\pi_ {U}$ is a multivariate uniform density. Given the optimal $\hat{T}$ that maximizes $\mathcal{J}_ {f}(T)$, the copula estimate is obtained as

$$c_U(\mathbf{u}) = \bigl(f^{*}\bigr)^{\prime} \bigl(\hat{T}(\mathbf{u})\bigr).$$


📝 References

If you use the code for your research, please cite our paper:

@article{letizia2022copula,
  title={Copula density neural estimation},
  author={Letizia, Nunzio A and Novello, Nicola and Tonello, Andrea M},
  journal={arXiv preprint arXiv:2211.15353},
  year={2022}
}

📋 Acknowledgments

The implementation is based on / inspired by:


📧 Contact

nunzio.letizia@aau.at

nicola.novello@aau.at

About

[TNNLS (2025)] Official PyTorch and Keras implementations of "Copula Density Neural Estimation"

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%