Quelle est l'approche préférée et efficace pour interpoler des données multidimensionnelles?

22

Quelle est l'approche préférée et efficace pour interpoler des données multidimensionnelles?

Choses qui m'inquiètent:

  1. performances et mémoire pour la construction, évaluation unique / batch
  2. dimensions de manipulation de 1 à 6
  3. linéaire ou d'ordre supérieur
  4. pouvoir obtenir des gradients (sinon linéaires)
  5. grille régulière vs dispersée
  6. utilisant comme fonction d'interpolation, par exemple pour trouver des racines ou pour minimiser
  7. capacités d'extrapolation

Existe-t-il une implémentation open source efficace de cela?

J'ai eu une chance partielle avec scipy.interpolate et kriging de scikit-learn.

Je n'ai pas essayé les splines, les polynômes de Chebyshev, etc.

Voici ce que j'ai trouvé jusqu'à présent sur ce sujet:

Interpolation linéaire Python 4D sur une grille rectangulaire

Interpolation rapide de données 3D régulièrement échantillonnées avec différents intervalles en x, y et z

Interpolation rapide des données de grille régulières

Quelle méthode d'interpolation dispersée multivariée est la meilleure pour une utilisation pratique?

denfromufa
la source
1
Pour quoi voulez-vous votre interpolation? Comment sont vos données d'entrée? Je ne pense pas que la dimensionnalité change beaucoup le problème.
nicoguaro
2
Malheureusement, l'interpolation multivariée n'est pas aussi coupée et séchée qu'univariée. Par exemple, dans 1D, vous pouvez choisir des nœuds d'interpolation arbitraires (tant qu'ils sont mutuellement distincts) et toujours obtenir un polynôme d'interpolation unique d'un certain degré. Déjà en 2D, ce n'est pas vrai, et vous pouvez ne pas avoir de problème d'interpolation polynomiale bien défini selon la façon dont vous choisissez vos nœuds. Donc, en bref, vous devez nous donner plus d'informations sur la structure de vos données pour obtenir des informations utiles.
cfh
1
Voici une enquête sur l'approximation polynomiale multivariée, si vous souhaitez poursuivre cette approche: Gasca & Sauer, "Interpolation polynomiale dans plusieurs variables", 2000 citeseerx.ist.psu.edu/viewdoc/…
cfh
3
Les polynômes de Chebyshev sur une grille clairsemée (par exemple Smolyak) sont très rapides pour des dimensions supérieures. Les points de grille sont un sous-ensemble prédéterminé des points de Chebyshev. Quelques implémentations: tasmanian.ornl.gov , ians.uni-stuttgart.de/spinterp/about.html , github.com/EconForge/Smolyak
Ronaldo Carpio
1
Vous pouvez essayer quelque chose comme la tessellation Delaunay sur le collecteur.
EngrStudent

Réponses:

14

Pour la première partie de ma question, j'ai trouvé cette comparaison très utile pour les performances de différentes méthodes d'interpolation linéaire utilisant des bibliothèques python:

http://nbviewer.ipython.org/github/pierre-haessig/stodynprog/blob/master/stodynprog/linear_interp_benchmark.ipynb

Vous trouverez ci-dessous la liste des méthodes collectées jusqu'à présent.

Interpolation standard, grille structurée:

http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.ndimage.interpolation.map_coordinates.html

http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.RegularGridInterpolator.html

https://github.com/rncarpio/linterp/

Grille non structurée (dispersée):

http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.LinearNDInterpolator.html#scipy.interpolate.LinearNDInterpolator

http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html

http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.Rbf.html

2 grands projets qui incluent l'interpolation:

https://github.com/sloriot/cgal-bindings (parties de CGAL, sous licence GPL / LGPL)

https://www.earthsystemcog.org/projects/esmp/ (Licence University of Illinois-NCSA ~ = MIT + BSD-3)

Grilles clairsemées:

https://github.com/EconForge/Smolyak

https://github.com/EconForge/dolo/tree/master/dolo/numeric/interpolation

http://people.sc.fsu.edu/~jburkardt/py_src/sparse_grid/sparse_grid.html

https://aerodynamics.lr.tudelft.nl/~rdwight/work_sparse.html

https://pypi.python.org/pypi/puq

Krigeage (processus gaussien):

http://scikit-learn.org/stable/modules/generated/sklearn.gaussian_process.GaussianProcess.html

https://github.com/SheffieldML/GPy

https://software.sandia.gov/svn/surfpack/trunk/

http://openmdao.org/dev_docs/_modules/openmdao/lib/surrogatemodels/kriging_surrogate.html

Licence GPL générale:

https://github.com/rncarpio/delaunay_linterp

Tasmanian

La boîte à outils pour la modélisation adaptative stochastique et l'approximation non intrusive - est une bibliothèque robuste pour l'intégration et l'interpolation dimensionnelles élevées ainsi que pour l'étalonnage des paramètres.

Liaison Python pour la Tasmanie:

https://github.com/rncarpio/py_tsg

https://github.com/sloriot/cgal-bindings (parties de CGAL, sous licence GPL / LGPL)

denfromufa
la source
2
J'ajouterai que le très bon package DAKOTA de sandia a toutes les méthodes ci-dessus implémentées et bien d'autres, et qu'il fournit des liaisons python. Ce n'est peut-être pas le plus facile à mettre en place, mais il est de premier ordre et donne beaucoup d'options, et mérite d'être vérifié.
Aurelius
@Aurelius pouvez-vous s'il vous plaît pointer vers des routines d'interpolation / approximation au sein de DAKOTA? J'ai de l'expérience avec ce package mais je n'ai remarqué que surfpack (déjà ref-d ci-dessus) pour le krigeage.
denfromufa
@Aurelius tous les modèles d'approximation dakota sont en surfpack
denfromufa
C'est un as sanglant; bien joué!
Astrid