Was ist der bevorzugte und effiziente Ansatz für die Interpolation mehrdimensionaler Daten?

22

Was ist der bevorzugte und effiziente Ansatz für die Interpolation mehrdimensionaler Daten?

Dinge, über die ich mir Sorgen mache:

  1. Leistung und Speicher für Konstruktion, Einzel- / Chargenbewertung
  2. Handhabungsabmessungen von 1 bis 6
  3. linear oder höherer Ordnung
  4. Fähigkeit, Gradienten zu erhalten (wenn nicht linear)
  5. regelmäßiges gegen zerstreutes Gitter
  6. Verwendung als Interpolationsfunktion, zB um Wurzeln zu finden oder zu minimieren
  7. Extrapolationsmöglichkeiten

Gibt es eine effiziente Open-Source-Implementierung davon?

Ich hatte teilweise Glück mit scipy.interpolate und kriging von scikit-learn.

Ich habe keine Splines, Chebyshev-Polynome usw. ausprobiert.

Folgendes habe ich bisher zu diesem Thema gefunden:

Python 4D lineare Interpolation auf einem rechteckigen Gitter

Schnelle Interpolation von regelmäßig abgetasteten 3D-Daten mit unterschiedlichen Intervallen in x, y und z

Schnelle Interpolation von regulären Rasterdaten

Welche Methode der multivariaten Streuinterpolation ist für die praktische Anwendung am besten geeignet?

denfromufa
quelle
1
Wofür möchtest du deine Interpolation? Wie sind Ihre Eingabedaten? Ich denke nicht, dass die Dimensionalität das Problem stark verändert.
nicoguaro
2
Leider ist die multivariate Interpolation nicht so scharf und trocken wie die univariate. In 1D können Sie beispielsweise beliebige Interpolationsknoten auswählen (sofern diese voneinander verschieden sind) und erhalten immer ein eindeutiges Interpolationspolynom eines bestimmten Grades. Bereits in 2D ist dies nicht der Fall, und je nachdem, wie Sie Ihre Knoten auswählen, liegt möglicherweise kein genau definiertes Polynominterpolationsproblem vor. Kurz gesagt, Sie müssen uns mehr Informationen über die Struktur Ihrer Daten geben, um nützliche Informationen zu erhalten.
Vgl.
1
Hier ist eine Umfrage zur multivariaten Polynomapproximation, wenn Sie diesen Ansatz verfolgen möchten: Gasca & Sauer, "Polynominterpolation in mehreren Variablen", 2000 citeseerx.ist.psu.edu/viewdoc/…
vgl.
3
Chebyshev-Polynome auf einem spärlichen Gitter (z. B. Smolyak) sind für höhere Dimensionen sehr schnell. Die Gitterpunkte sind eine vorbestimmte Untermenge der Chebyshev-Punkte. Einige Implementierungen: tasmanian.ornl.gov , ians.uni-stuttgart.de/spinterp/about.html , github.com/EconForge/Smolyak
Ronaldo Carpio
1
Sie könnten etwas wie Delaunay Tessellation auf der Mannigfaltigkeit versuchen.
EngrStudent

Antworten:

14

Für den ersten Teil meiner Frage fand ich diesen sehr nützlichen Vergleich zur Durchführung verschiedener linearer Interpolationsmethoden unter Verwendung von Python-Bibliotheken:

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

Unten finden Sie eine Liste der bisher gesammelten Methoden.

Standardinterpolation, strukturiertes Gitter:

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/

Unstrukturiertes (verstreutes) Gitter:

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 große Projekte, die Interpolation enthalten:

https://github.com/sloriot/cgal-bindings (Teile von CGAL, lizenzierte GPL / LGPL)

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

Spärliche Gitter:

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

Kriging (Gaußscher Prozess):

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

Allgemeine GPL-Lizenz:

https://github.com/rncarpio/delaunay_linterp

tasmanisch

Das Toolkit für adaptive stochastische Modellierung und nicht-intrusive Approximation - ist eine robuste Bibliothek für hochdimensionale Integration und Interpolation sowie Parameterkalibrierung.

Python-Bindung für Tasmanian:

https://github.com/rncarpio/py_tsg

https://github.com/sloriot/cgal-bindings (Teile von CGAL, lizenzierte GPL / LGPL)

denfromufa
quelle
2
Ich füge hinzu, dass das sehr exzellente DAKOTA-Paket von sandia alle oben genannten und viele weitere Methoden implementiert hat und Python-Bindungen bietet. Es ist vielleicht nicht die einfachste Methode, um loszulegen, aber es ist erstklassig und bietet viele Optionen. Es lohnt sich, es auszuprobieren.
Aurelius
@ Aurelius, können Sie bitte auf Interpolations- / Approximationsroutinen in DAKOTA verweisen? Ich habe Erfahrung mit diesem Paket, aber nur Surfpack (bereits oben erwähnt) für das Kriging bemerkt.
denfromufa
ok, ich habe es gefunden - dakota.sandia.gov/sites/default/files/docs/6.0/html-ref/…
denfromufa
@ Aurelius alle Dakota Approximation Modelle sind in Surfpack
denfromufa
Das ist blutiges Ass; gut gemacht!
Astrid,