Computations and statistics on manifolds with geometric structures.
MIT License
.. image:: logo.png :width: 730 :alt: Geomstats logo
Geomstats is a Python package for computations, statistics, machine learning and deep learning on manifolds.
The package is organized into two main modules: geometry and learning. The module geometry implements differential geometry: manifolds, Lie groups, fiber bundles, shape spaces, information manifolds, Riemannian metrics, and more. The module learning implements statistics and learning algorithms for data on manifolds. Users can choose between backends: NumPy, Autograd or PyTorch.
.. list-table:: :header-rows: 0
Keep in touch with the community by joining us on our slack workspace <https://join.slack.com/t/geomstats/shared_invite/zt-15t8k0q7r-Duxt6j6aA3rDOIms2Vd~RQ>
__!
NEWS:
2023: Discover our information_geometry module <https://github.com/geomstats/geomstats/tree/main/geomstats/information_geometry>
_ , and its paper Parametric information geometry with the package Geomstats <https://dl.acm.org/doi/abs/10.1145/3627538>
_ by Alice Le Brigant, Jules Deschamps, Antoine Collas, and Nina Miolane, published in the ACM Transactions of Mathematical Software.
2023: Discover our foundational paper Introduction to Riemannian Geometry and Geometric Statistics: From Basic Theory to Implementation with Geomstats <https://www.nowpublishers.com/article/Details/MAL-098>
_ by Nicolas Guigui, Nina Miolane and Xavier Pennec, published in Foundations and Trends in Machine Learning.
2021-2022: The white papers summarizing the findings from our ICLR 2021 and 2022 challenges of computational differential geometry and topology are available here (2021) <https://arxiv.org/abs/2108.09810>
__ and here (2022) <https://arxiv.org/abs/2206.09048>
_.
To get an overview of geomstats
, see our introductory video <https://www.youtube.com/watch?v=Ju-Wsd84uG0&list=PLYx7XA2nY5GejOB1lsvriFeMytD1-VS1B&index=3>
__.
To understand how geomstats
is built, check out these slides <https://drive.google.com/file/d/1YxeGeLXrJdVQLBJQ-SYPirQ7V_UisqUw/view?usp=sharing>
__.
To get started with geomstats
, see the
examples <https://github.com/geomstats/geomstats/tree/main/examples>
__
and
notebooks <https://github.com/geomstats/geomstats/tree/main/notebooks>
__
directories.
The documentation of geomstats
can be found on the documentation website <https://geomstats.github.io/>
__.
Interested in information geometry? Go to our information_geometry <https://github.com/geomstats/geomstats/tree/main/geomstats/information_geometry>
_ module.
To follow the scientific literature on geometric statistics, follow
our twitter-bot @geomstats <https://twitter.com/geomstats>
__!
If you find geomstats
useful, please kindly cite:
paper <https://jmlr.org/papers/v21/19-027.html>
__ :::
@article{JMLR:v21:19-027,
author = {Nina Miolane and Nicolas Guigui and Alice Le Brigant and Johan Mathe and Benjamin Hou and Yann Thanwerdas and Stefan Heyder and Olivier Peltre and Niklas Koep and Hadi Zaatiti and Hatem Hajri and Yann Cabanes and Thomas Gerald and Paul Chauchat and Christian Shewmake and Daniel Brooks and Bernhard Kainz and Claire Donnat and Susan Holmes and Xavier Pennec},
title = {Geomstats: A Python Package for Riemannian Geometry in Machine Learning},
journal = {Journal of Machine Learning Research},
year = {2020},
volume = {21},
number = {223},
pages = {1-9},
url = {http://jmlr.org/papers/v21/19-027.html}
}
Geomstats software version <https://doi.org/10.5281/zenodo.4624475>
__ (citation automatically generated by Zenodo at the bottom right of this link).We would sincerely appreciate citations to both the original research paper and the software version, to acknowledge authors who started the codebase and made the library possible, together with the crucial work of all contributors who are continuously implementing pivotal new geometries and important learning algorithms, as well as refactoring, testing and documenting the code to democratize geometric statistics and (deep) learning and foster reproducible research in this field.
From a terminal (OS X & Linux), you can install geomstats and its
requirements with pip3
as follows:
::
pip3 install geomstats
This method installs the latest version of geomstats that is uploaded on PyPi. Note that geomstats is only available with Python3.
From a terminal (OS X & Linux) or an Anaconda prompt (Windows), you can install geomstats and its
requirements with conda
as follows:
::
conda install -c conda-forge geomstats
This method installs the latest version of geomstats that is uploaded on conda-forge. Note that geomstats is only available with Python3.
From a terminal (OS X & Linux), you can install geomstats and its
requirements via git
as follows:
::
git clone https://github.com/geomstats/geomstats.git
cd geomstats
pip3 install .
This method installs the latest GitHub version of geomstats.
Note that this only installs the minimum requirements. To add the optional,
development, continuous integration and documentation requirements,
refer to the file pyproject.toml
.
Developers should git clone the main branch of this repository, together with the development requirements
and the optional requirements to enable autograd
and pytorch
backends:
::
pip3 install geomstats[dev,opt]
Additionally, we recommend installing our pre-commit hook, to ensure that your code follows our Python style guidelines:
::
pre-commit install
Geomstats can run seamlessly with numpy
, autograd
or
pytorch
. Note that autograd
and pytorch
and requirements are
optional, as geomstats can be used with numpy
only. By default, the
numpy
backend is used. The visualizations are only available with
this backend.
To get the autograd
and pytorch
versions compatible with
geomstats, install the optional requirements:
::
pip3 install geomstats[opt]
To install only the requirements for a given backend do:
::
pip3 install geomstats[<backend_name>]
You can choose your backend by setting the environment variable
GEOMSTATS_BACKEND
to numpy
, autograd
or pytorch
, and
importing the backend
module. From the command line:
::
export GEOMSTATS_BACKEND=<backend_name>
and in the Python3 code:
::
import geomstats.backend as gs
To use geomstats
for learning algorithms on Riemannian manifolds,
you need to follow three steps:
The data should be represented by a gs.array
. This structure
represents numpy arrays, autograd or pytorch tensors, depending on the
choice of backend.
The following code snippet shows the use of tangent Principal Component
Analysis on simulated data
on the space of 3D rotations.
.. code:: python
from geomstats.geometry.special_orthogonal import SpecialOrthogonal
from geomstats.learning.pca import TangentPCA
so3 = SpecialOrthogonal(n=3, point_type="vector")
data = so3.random_uniform(n_samples=10)
tpca = TangentPCA(space=so3, n_components=2)
tpca = tpca.fit(data)
tangent_projected_data = tpca.transform(data)
All geometric computations are performed behind the scenes. The user only needs a high-level understanding of Riemannian geometry. Each algorithm can be used with any of the manifolds and metric implemented in the package.
To see additional examples, go to the
examples <https://github.com/geomstats/geomstats/tree/main/examples>
__
or
notebooks <https://github.com/geomstats/geomstats/tree/main/notebooks>
__
directories.
See our
contributing <https://github.com/geomstats/geomstats/blob/main/docs/contributing/index.rst>
__
guidelines!
Interested? Contact us and join the next hackathons. Previous Geomstats events include:
Geometry and Statistics in Data Sciences <https://indico.math.cnrs.fr/category/498/>
__, in Paris.This work is supported by:
GeomStats <http://www-sop.inria.fr/asclepios/projects/GeomStats/>
__,G-Statistics <https://team.inria.fr/epione/en/research/erc-g-statistics/>
__ No. 786854),SMAI <http://smai.emath.fr/>
__),.. |Twitter| image:: https://img.shields.io/twitter/follow/geomstats?label=Follow%20%40geomstats%20%20%20%20&style=social :target: https://twitter.com/geomstats .. |PyPI version| image:: https://badge.fury.io/py/geomstats.svg :target: https://badge.fury.io/py/geomstats .. |Build Status| image:: https://github.com/geomstats/geomstats/actions/workflows/test.yml/badge.svg :target: https://github.com/geomstats/geomstats/actions/workflows/test.yml .. |Slack| image:: https://img.shields.io/badge/Slack-Join-yellow :target: https://join.slack.com/t/geomstats/shared_invite/zt-15t8k0q7r-Duxt6j6aA3rDOIms2Vd~RQ .. |Coverage Status np| image:: https://codecov.io/gh/geomstats/geomstats/branch/main/graph/badge.svg?flag=numpy :target: https://codecov.io/gh/geomstats/geomstats .. |Coverage Status autograd| image:: https://codecov.io/gh/geomstats/geomstats/branch/main/graph/badge.svg?flag=autograd :target: https://codecov.io/gh/geomstats/geomstats .. |Coverage Status torch| image:: https://codecov.io/gh/geomstats/geomstats/branch/main/graph/badge.svg?flag=pytorch :target: https://codecov.io/gh/geomstats/geomstats .. |Zenodo| image:: https://zenodo.org/badge/108200238.svg :target: https://zenodo.org/badge/latestdoi/108200238 .. |Downloads| image:: https://static.pepy.tech/personalized-badge/geomstats?period=total&units=international_system&left_color=grey&right_color=brightgreen&left_text=Downloads :target: https://pepy.tech/project/geomstats .. |python| image:: https://img.shields.io/badge/python-3.11+-blue?logo=python :target: https://www.python.org/ .. |tutorial| image:: https://img.shields.io/youtube/views/Ju-Wsd84uG0?label=watch&style=social :target: https://www.youtube.com/watch?v=Ju-Wsd84uG0 .. |doc| image:: https://img.shields.io/badge/docs-website-brightgreen?style=flat :target: https://geomstats.github.io/?badge=latest .. |binder| image:: https://mybinder.org/badge_logo.svg :target: https://mybinder.org/v2/gh/geomstats/geomstats/main?filepath=notebooks .. |contributions| image:: https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat :target: https://geomstats.github.io/contributing.html