Qual è l'approccio preferito ed efficiente per l'interpolazione di dati multidimensionali?


22

Qual è l'approccio preferito ed efficiente per l'interpolazione di dati multidimensionali?

Cose di cui sono preoccupato:

  1. prestazioni e memoria per costruzione, valutazione singolo / batch
  2. dimensioni di movimentazione da 1 a 6
  3. lineare o di ordine superiore
  4. capacità di ottenere gradienti (se non lineari)
  5. griglia regolare vs sparsa
  6. usando come funzione di interpolazione, ad esempio per trovare le radici o minimizzare
  7. capacità di estrapolazione

Esiste un'attuazione open source efficiente di questo?

Ho avuto una fortuna parziale con scipy.interpolate e kriging di scikit-learn.

Non ho provato spline, polinomi di Chebyshev, ecc.

Ecco cosa ho trovato finora su questo argomento:

Interpolazione lineare Python 4D su una griglia rettangolare

Interpolazione rapida di dati 3D regolarmente campionati con intervalli diversi in x, ye z

Interpolazione rapida di dati di griglia regolari

Quale metodo di interpolazione sparsa multivariata è la migliore per l'uso pratico?


1
Per cosa vuoi la tua interpolazione? Come sono i tuoi dati di input? Non penso che la dimensionalità cambi molto il problema.
Nicoguaro

2
Sfortunatamente, l'interpolazione multivariata non è tagliata e asciugata come univariata. Ad esempio, in 1D, è possibile scegliere nodi di interpolazione arbitraria (purché siano reciprocamente distinti) e ottenere sempre un polinomio interpolato unico di un certo grado. Già in 2D, questo non è vero e potresti non avere un problema di interpolazione polinomiale ben definito a seconda di come scegli i tuoi nodi. Quindi, in breve, devi fornirci ulteriori informazioni sulla struttura dei tuoi dati per ottenere informazioni utili.
cfh

1
Ecco un sondaggio sull'approssimazione polinomiale multivariata, se si desidera perseguire tale approccio: Gasca & Sauer, "Interpolazione polinomiale in più variabili", 2000 citeseerx.ist.psu.edu/viewdoc/…
cfh

3
I polinomi di Chebyshev su una griglia sparsa (ad es. Smolyak) sono molto veloci per dimensioni più elevate. I punti della griglia sono un sottoinsieme predeterminato dei punti di Chebyshev. Alcune implementazioni: tasmanian.ornl.gov , ians.uni-stuttgart.de/spinterp/about.html , github.com/EconForge/Smolyak
Ronaldo Carpio

1
Potresti provare qualcosa come la tessellazione Delaunay sul collettore.
EngrStudent - Ripristina Monica

Risposte:


14

Per la prima parte della mia domanda, ho trovato questo confronto molto utile per le prestazioni di diversi metodi di interpolazione lineare usando le librerie python:

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

Di seguito è riportato un elenco dei metodi raccolti finora.

Interpolazione standard, griglia strutturata:

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/

Griglia non strutturata (sparsa):

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 grandi progetti che includono l'interpolazione:

https://github.com/sloriot/cgal-bindings (parti di CGAL, licenza GPL / LGPL)

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

Griglie sparse:

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 (processo gaussiano):

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

Licenza GPL generale:

https://github.com/rncarpio/delaunay_linterp

tasmaniano

Il toolkit per la modellazione stocastica adattiva e l'approssimazione non intrusiva - è una libreria robusta per l'integrazione e l'interpolazione ad alta dimensione e la calibrazione dei parametri.

Binding Python per tasmaniano:

https://github.com/rncarpio/py_tsg

https://github.com/sloriot/cgal-bindings (parti di CGAL, licenza GPL / LGPL)


2
Aggiungerò che l'ottimo pacchetto DAKOTA di sandia ha implementato tutti i metodi sopra descritti e molti altri, e fornisce collegamenti python. Potrebbe non essere il modo più semplice per iniziare, ma è di prim'ordine e offre molte opzioni, e vale la pena dare un'occhiata.
Aurelio,

@Aurelius puoi indicare le routine di interpolazione / approssimazione all'interno di DAKOTA? Ho esperienza con quel pacchetto ma ho notato solo surfpack (già rif-d sopra) per kriging.
denfromufa,


@Aurelius tutti i modelli di approssimazione del Dakota sono in surfpack
denfromufa il

Questo è un asso insanguinato; molto bene!
Astrid,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.