Il est fortement recommandé de configurer un nouvel environnement virtuel en tapant
virtualenv -p python3 feyn source feyn/bin/activate
Installez d'abord numpy avec pip install numpy
. Le package 'aifeynman' est disponible sur PyPI et peut être installé avec pip install aifeynman
.
Notez que pour l'instant, AI Feynman n'est pris en charge que pour les environnements Linux et Mac.
Accédez à un répertoire propre et exécutez les commandes Python suivantes :
import aifeynman aifeynman.get_demos("example_data") # Download examples from server aifeynman.run_aifeynman("./example_data/", "example1.txt", 60, "14ops.txt", polyfit_deg=3, NN_epochs=500)
Cet exemple sera résolu en 10 à 30 minutes environ, selon l'ordinateur que vous possédez et si vous disposez ou non d'un GPU.
Ici, « example.txt » contient la table de données sur laquelle effectuer une régression symbolique, avec des colonnes séparées par des espaces, des virgules ou des tabulations. Les autres paramètres contrôlent la recherche : ici, les modules de force brute essaient des combinaisons des 14 opérations de base dans '14ops.txt' pendant 60 secondes maximum, les ajustements polynomiaux sont essayés jusqu'au degré 3 et le réseau neuronal interpolateur est entraîné pendant jusqu'à 60 secondes. à 500 époques.
Ce code est une implémentation améliorée de AI Feynman : a Physics-Inspired Method for Symbolic Regression, Silviu-Marian Udrescu et Max Tegmark (2019) [Science Advances] et AI Feynman 2.0 : Régression symbolique Pareto-optimale exploitant la modularité des graphes, Udrescu SM et al. (2020) [arXiv].
Veuillez consulter cet article Medium pour une explication plus détaillée de la façon d'exécuter le code.
Pour commencer, exécutez compile.sh pour compiler les fichiers fortran utilisés pour le code force brute.
ai_feynman_example.py contient un exemple d'exécution du code sur quelques exemples (trouvés dans le répertoire example_data). Les exemples correspondent aux équations I.8.14, I.10.7 et I.50.26 du tableau 4 de l'article. D'autres fichiers de données sur lesquels le code peut être testé peuvent être trouvés dans la base de données de régression symbolique Feynman.
La fonction principale du code, appelée par l'utilisateur, possède les paramètres suivants :
pathdir - chemin d'accès au répertoire contenant le fichier de données
filename - le nom du fichier contenant les données
BF_try_time - limite de temps pour chaque appel en force brute (définie par défaut sur 60 secondes)
BF_ops_file_type - fichier contenant les symboles à utiliser dans le code force brute (défini par défaut sur "14ops.txt")
polyfit_deg - degré maximum du polynôme essayé par la routine d'ajustement polynomial (défini par défaut sur 4)
NN_epochs - nombre d'époques pour la formation (défini par défaut sur 4000)
vars_name - nom des variables apparaissant dans l'équation (y compris le nom de la variable de sortie). Cela doit être transmis sous forme de liste de chaînes, avec le nom des variables apparaissant dans le même ordre que dans le fichier contenant les données.
test_percentage - pourcentage des données d'entrée à conserver de côté et à utiliser comme ensemble de test
Le fichier de données à analyser doit être un fichier texte dont chaque colonne contient les valeurs numériques de chaque variable (dépendante et indépendante). Le fichier solution sera enregistré dans le répertoire appelé "results" sous le nom solution_{filename}. Le fichier solution contiendra plusieurs lignes (correspondant à chaque point de la frontière de Pareto), chaque ligne montrant :
le logarithme moyen en base 2 de l'erreur de l'équation découverte appliquée aux données d'entrée (cela peut être considéré comme l'erreur moyenne en bits)
le logarithme cumulatif en base 2 de l'erreur de l'équation découverte appliquée aux données d'entrée (cela peut être considéré comme l'erreur cumulée en bits)
la complexité de l'équation découverte (en bits)
l'erreur de l'équation découverte appliquée aux données d'entrée
l'expression symbolique de l'équation découverte
Si test_percentage est différent de zéro, un nombre supplémentaire est ajouté au début de chaque ligne, indiquant l'erreur de l'équation découverte sur l'ensemble de test.
ai_feynman_terminal_example.py permet d'appeler la fonction aiFeynman depuis la ligne de commande. (par exemple python ai_feynman_terminal_example.py --pathdir=../example_data/ --filename=example1.txt). Utilisez python ai_feynman_terminal_example.py --help pour afficher tous les paramètres disponibles qui peuvent être transmis à la fonction.
Si vous comparez, développez ou utilisez certains aspects du travail d'AI Feynman, veuillez citer ce qui suit :
@article{udrescu2020ai, title={AI Feynman: A physics-inspired method for symbolic regression}, author={Udrescu, Silviu-Marian and Tegmark, Max}, journal={Science Advances}, volume={6}, number={16}, pages={eaay2631}, year={2020}, publisher={American Association for the Advancement of Science} }
@article{udrescu2020ai, title={AI Feynman 2.0: Pareto-optimal symbolic regression exploiting graph modularity}, author={Udrescu, Silviu-Marian and Tan, Andrew and Feng, Jiahai and Neto, Orisvaldo and Wu, Tailin and Tegmark, Max}, journal={arXiv preprint arXiv:2006.10782}, year={2020} }