Jakie jest preferowane i skuteczne podejście do interpolacji danych wielowymiarowych?


22

Jakie jest preferowane i skuteczne podejście do interpolacji danych wielowymiarowych?

Rzeczy, o które się martwię:

  1. wydajność i pamięć do budowy, ocena pojedynczej partii / partii
  2. wymiary obsługi od 1 do 6
  3. liniowy lub wyższego rzędu
  4. możliwość uzyskania gradientów (jeśli nie liniowych)
  5. regularna vs rozproszona siatka
  6. wykorzystując jako funkcję interpolacyjną, np. w celu znalezienia korzeni lub zminimalizowania
  7. możliwości ekstrapolacji

Czy istnieje skuteczna implementacja tego typu oprogramowania typu open source?

Miałem częściowe szczęście z scipy.interpolate i kriging z scikit-learn.

Nie próbowałem splajnów, wielomianów Czebyszewa itp.

Oto, co znalazłem do tej pory na ten temat:

Interpolacja liniowa Python 4D na prostokątnej siatce

Szybka interpolacja regularnie próbkowanych danych 3D z różnymi przedziałami w x, yiz

Szybka interpolacja zwykłych danych siatki

Jaka metoda interpolacji rozproszonej na wielu odmianach jest najlepsza w praktyce?


1
Po co ci interpolacja? Jak tam twoje dane wejściowe? Nie sądzę, że wymiarowość bardzo zmienia problem.
nicoguaro

2
Niestety interpolacja wielowymiarowa nie jest tak wycięta i wysuszona jak jednowymiarowa. Na przykład w 1D możesz wybrać dowolne węzły interpolacji (o ile są one wzajemnie różne) i zawsze uzyskać unikalny wielomian interpolacyjny pewnego stopnia. Już w 2D nie jest to prawdą i możesz nie mieć dobrze zdefiniowanego problemu interpolacji wielomianowej, w zależności od wyboru węzłów. Krótko mówiąc, musisz podać nam więcej informacji na temat struktury swoich danych, aby uzyskać użyteczne dane wejściowe.
por.

1
Oto przegląd na wieloczynnikowej wielomianu zbliżenia, jeśli chcesz kontynuować to podejście: Gasca & Sauer, „interpolacji wielomianowej w kilku zmiennych”, 2000 citeseerx.ist.psu.edu/viewdoc/...
CFH

3
Wielomiany Czebyszewa na rzadkiej siatce (np. Smolyak) są bardzo szybkie w przypadku większych wymiarów. Punkty siatki są z góry określonym podzbiorem punktów Czebyszewa. Niektóre wdrożenia: tasmanian.ornl.gov , ians.uni-stuttgart.de/spinterp/about.html , github.com/EconForge/Smolyak
Ronaldo Carpio

1
Możesz spróbować czegoś takiego jak teselacja Delaunaya na rozmaitości.
EngrStudent - Przywróć Monikę

Odpowiedzi:


14

W pierwszej części mojego pytania znalazłem to bardzo przydatne porównanie wydajności różnych metod interpolacji liniowej przy użyciu bibliotek Pythona:

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

Poniżej znajduje się lista metod zebranych do tej pory.

Interpolacja standardowa, siatka strukturalna:

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/

Siatka nieustrukturyzowana (rozproszona):

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 duże projekty zawierające interpolację:

https://github.com/sloriot/cgal-bindings (części CGAL, licencjonowane GPL / LGPL)

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

Rzadkie siatki:

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 (Proces Gaussa):

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

Ogólna licencja GPL:

https://github.com/rncarpio/delaunay_linterp

Tasmański

Zestaw narzędzi do adaptacyjnego modelowania stochastycznego i aproksymacji nieinwazyjnej - to solidna biblioteka do integracji i interpolacji w dużych wymiarach, a także do kalibracji parametrów.

Wiązanie Python dla Tasmanian:

https://github.com/rncarpio/py_tsg

https://github.com/sloriot/cgal-bindings (części CGAL, licencjonowane GPL / LGPL)


2
Dodam, że bardzo doskonały pakiet DAKOTA od sandii ma wszystkie powyższe metody zaimplementowane i wiele innych, i zapewnia wiązania python. Uruchomienie może nie być najłatwiejsze, ale jest na najwyższym poziomie i daje wiele opcji i warto je sprawdzić.
Aureliusz

@Aurelius, czy możesz wskazać procedury interpolacji / aproksymacji w DAKOTA? Mam doświadczenie z tym pakietem, ale zauważyłem tylko surfpack (już ref-d powyżej) do krigingu.
denfromufa


@Aurelius wszystkie modele przybliżenia Dakoty są w pakiecie surfowania
denfromufa

To jest cholerny as; dobra robota!
Astrid,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.