Voici le code de notre article ICML sur l'analyse des singularités basée sur la topologie :
@inproceedings { vonRohrscheidt23a ,
title = { Topological Singularity Detection at Multiple Scales } ,
author = { von Rohrscheidt, Julius and Rieck, Bastian } ,
year = 2023 ,
booktitle = { Proceedings of the 40th International Conference on Machine Learning } ,
publisher = { PMLR } ,
series = { Proceedings of Machine Learning Research } ,
number = 202 ,
pages = { 35175--35197 } ,
editor = { Krause, Andreas and Brunskill, Emma and Cho, Kyunghyun and Engelhardt, Barbara and Sabato, Sivan and Scarlett, Jonathan } ,
abstract = { The manifold hypothesis, which assumes that data lies on or close to an unknown manifold of low intrinsic dimension, is a staple of modern machine learning research. However, recent work has shown that real-world data exhibits distinct non-manifold structures, i.e. singularities, that can lead to erroneous findings. Detecting such singularities is therefore crucial as a precursor to interpolation and inference tasks. We address this issue by developing a topological framework that (i) quantifies the local intrinsic dimension, and (ii) yields a Euclidicity score for assessing the `manifoldness' of a point along multiple scales. Our approach identifies singularities of complex spaces, while also capturing singular structures and local geometric complexity in image data. }
}
Notre code a été testé avec Python 3.8 et Python 3.9 sous Mac OS X et Linux. Les autres versions de Python peuvent ne pas prendre en charge toutes les dépendances.
La méthode recommandée pour installer le projet est via poetry
. Si celui-ci est disponible, l'installation devrait fonctionner très rapidement :
$ poetry install
Les versions récentes de pip
devraient également être capables d'installer le projet directement :
$ pip install .
Pour reproduire les principales expériences de notre article, nous envoyons des ensembles de données synthétiques dans le référentiel et offrons la possibilité automatisée de télécharger les ensembles de données de vision par ordinateur ( MNIST
et FashionMNIST
). Pour des raisons de simplicité, nous suggérons de reproduire d’abord les expériences avec des nuages de points synthétiques car ils s’exécutent rapidement même sur un ordinateur de bureau standard.
Toutes les expériences utilisent le script cli.py
, qui fournit une interface de ligne de commande à notre framework. Étant donné les paramètres d'entrée pour les anneaux locaux, ce script calculera les valeurs d'euclidicité comme décrit dans l'article. Pour des raisons de simplicité, toutes les sorties sont fournies vers stdout
, c'est-à-dire la sortie standard de votre terminal, et doivent être redirigées vers un fichier pour une analyse ultérieure.
Nous fournirons par la suite les commandes précises pour reproduire les expériences ; les lecteurs sont invités à jeter un œil au code dans cli.py
ou à appeler python cli.py --help
afin de voir quelles options supplémentaires sont disponibles pour le traitement des données.
Exécutez les commandes suivantes depuis le répertoire racine du référentiel :
$ cd tardis
$ python cli.py ../data/Pinched_torus.txt.gz -q 500 -r 0.05 -R 0.45 -s 0.2 -S 0.6 > ../output/Pinched_torus.txt
Cela créera un nuage de points de 500 points d'échantillonnage avec
Attention : cet exemple peut nécessiter un temps d'exécution long sur une machine ordinaire. Nous l'avons exécuté sur notre cluster (voir aussi le dossier scripts
dans le répertoire racine).
Exécutez les commandes suivantes depuis le répertoire racine du référentiel :
$ cd tardis
$ python cli.py -k 100 -q 2000 -d 2 --num-steps 20 ../data/Wedged_spheres_2D.txt.gz > ../output/Wedged_spheres_2D.txt
Cela utilisera la procédure automatisée de sélection des paramètres basée sur les voisins les plus proches. Notez que cet exemple utilise plus de points de requête ; il est bien entendu possible d'ajuster ce paramètre.
Consultez le dossier d'exemples pour quelques extraits de code qui montrent comment utiliser TARDIS dans votre propre code. Ils utilisent tous l’API préliminaire.
Notre code est publié sous une licence BSD-3-Clause. Cette licence vous permet essentiellement d'utiliser librement notre code comme vous le souhaitez, de l'intégrer dans vos projets, et bien plus encore, à condition de reconnaître les auteurs originaux. Veuillez vous référer à LICENSE.md pour plus d'informations.
Ce projet est maintenu par les membres du AIDOS Lab. Veuillez ouvrir un problème au cas où vous rencontreriez des problèmes.