Qual é a abordagem preferida e eficiente para interpolar dados multidimensionais?

22

Qual é a abordagem preferida e eficiente para interpolar dados multidimensionais?

Coisas com as quais me preocupo:

  1. desempenho e memória para construção, avaliação de lote único
  2. dimensões de manipulação de 1 a 6
  3. ordem linear ou superior
  4. capacidade de obter gradientes (se não lineares)
  5. grade regular versus dispersa
  6. como função de interpolação, por exemplo, para encontrar raízes ou minimizar
  7. recursos de extrapolação

Existe uma implementação eficiente de código aberto disso?

Eu tive sorte parcial com scipy.interpolate e kriging do scikit-learn.

Não tentei splines, polinômios de Chebyshev etc.

Aqui está o que eu encontrei até agora sobre este tópico:

Interpolação linear Python 4D em uma grade retangular

Interpolação rápida de dados 3D regularmente amostrados com diferentes intervalos em x, ye z

Interpolação rápida de dados regulares da rede

Qual método de interpolação dispersa multivariada é o melhor para uso prático?

denfromufa
fonte
11
Para que você deseja sua interpolação? Como estão seus dados de entrada? Não acho que a dimensionalidade mude muito o problema.
nicoguaro
2
Infelizmente, a interpolação multivariada não é tão cortada e seca quanto a univariada. Por exemplo, em 1D, você pode escolher nós de interpolação arbitrários (desde que sejam mutuamente distintos) e sempre obter um polinômio de interpolação exclusivo de um certo grau. Já em 2D, isso não é verdade e você pode não ter um problema de interpolação polinomial bem definido, dependendo de como escolher seus nós. Portanto, você deve nos fornecer mais informações sobre a estrutura dos seus dados para obter informações úteis.
CFH
11
Aqui está uma pesquisa sobre aproximação polinomial multivariada, se você quer levar a cabo essa abordagem: Gasca & Sauer, "interpolação polinomial em várias variáveis", 2000 citeseerx.ist.psu.edu/viewdoc/...
cfh
3
Os polinômios de Chebyshev em uma grade esparsa (por exemplo, Smolyak) são muito rápidos para dimensões mais altas. Os pontos de grade são um subconjunto predeterminado dos pontos de Chebyshev. Algumas implementações: tasmanian.ornl.gov , ians.uni-stuttgart.de/spinterp/about.html , github.com/EconForge/Smolyak
Ronaldo Carpio
11
Você pode tentar algo como o mosaico de Delaunay no coletor.
EngrStudent - Reinstala Monica 13/03

Respostas:

14

Para a primeira parte da minha pergunta, achei essa comparação muito útil para o desempenho de diferentes métodos de interpolação linear usando bibliotecas python:

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

Abaixo está uma lista dos métodos coletados até o momento.

Interpolação padrão, grade estruturada:

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/

Grade não estruturada (dispersa):

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 grandes projetos que incluem interpolação:

https://github.com/sloriot/cgal-bindings (partes da CGAL, licenciada GPL / LGPL)

https://www.earthsystemcog.org/projects/esmp/ (Licença da Universidade de Illinois-NCSA ~ = MIT + BSD-3)

Grades esparsas:

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

Licença GPL geral:

https://github.com/rncarpio/delaunay_linterp

Tasmânia

O Kit de ferramentas para modelagem estocástica adaptativa e aproximação não intrusiva - é uma biblioteca robusta para integração e interpolação de alta dimensão, bem como calibração de parâmetros.

Ligação Python para a Tasmânia:

https://github.com/rncarpio/py_tsg

https://github.com/sloriot/cgal-bindings (partes da CGAL, licenciada GPL / LGPL)

denfromufa
fonte
2
Acrescentarei que o excelente pacote DAKOTA da sandia possui todos os métodos acima implementados e muitos mais, além de fornecer ligações python. Pode não ser o mais fácil de colocar em funcionamento, mas é de primeira e oferece muitas opções, e vale a pena conferir.
Aurelius
@Aurelius, você pode apontar para rotinas de interpolação / aproximação no DAKOTA? Tenho experiência com esse pacote, mas só notei o surfpack (já ref-d acima) para o kriging.
Denfromufa
@Aurelius todos os modelos de aproximação Dakota estão em Surfpack
denfromufa
Este é um maldito ás; bem feito!
Astrid