Apa pendekatan yang disukai dan efisien untuk menginterpolasi data multidimensi?

22

Apa pendekatan yang disukai dan efisien untuk menginterpolasi data multidimensi?

Hal yang saya khawatirkan:

  1. kinerja dan memori untuk konstruksi, evaluasi tunggal / batch
  2. menangani dimensi dari 1 hingga 6
  3. linier atau tingkat tinggi
  4. kemampuan untuk mendapatkan gradien (jika tidak linier)
  5. grid biasa vs tersebar
  6. menggunakan sebagai Fungsi Interpolasi, misalnya untuk menemukan akar atau untuk meminimalkan
  7. kemampuan ekstrapolasi

Apakah ada implementasi open source yang efisien untuk hal ini?

Saya memiliki sedikit keberuntungan dengan scipy.interpolasi dan kriging dari scikit-belajar

Saya tidak mencoba splines, polinomial Chebyshev, dll.

Inilah yang saya temukan sejauh ini tentang topik ini:

Python 4D interpolasi linier pada kotak persegi panjang

Interpolasi cepat dari data 3D sampel biasa dengan interval berbeda dalam x, y, dan z

Interpolasi cepat data grid biasa

Metode interpolasi tersebar multivarian apa yang terbaik untuk penggunaan praktis?

denfromufa
sumber
1
Untuk apa interpolasi Anda? Bagaimana data input Anda? Saya tidak berpikir bahwa dimensi mengubah banyak masalah.
nicoguaro
2
Sayangnya, interpolasi multivariat tidak dipotong dan dikeringkan sebagai univariat. Misalnya, dalam 1D, Anda dapat memilih node interpolasi sewenang-wenang (asalkan mereka saling berbeda) dan selalu mendapatkan polinomial interpolasi unik pada tingkat tertentu. Sudah dalam 2D, ini tidak benar, dan Anda mungkin tidak memiliki masalah interpolasi polinomial yang jelas tergantung pada bagaimana Anda memilih node Anda. Jadi singkatnya, Anda harus memberi kami informasi lebih lanjut tentang struktur data Anda untuk mendapatkan input yang bermanfaat.
cfh
1
Berikut adalah survei tentang pendekatan polinomial multivariat, jika Anda ingin mengejar pendekatan itu: Gasca & Sauer, "Interpolasi polinomial dalam beberapa variabel", 2000 citeseerx.ist.psu.edu/viewdoc/…
cfh
3
Polinomial Chebyshev pada kisi tipis (mis. Smolyak) sangat cepat untuk dimensi yang lebih tinggi. Titik-titik kisi adalah subset yang ditentukan sebelumnya dari titik Chebyshev. Beberapa implementasi: tasmanian.ornl.gov , ians.uni-stuttgart.de/spinterp/about.html , github.com/EconForge/Smolyak
Ronaldo Carpio
1
Anda dapat mencoba sesuatu seperti Delaunay tessellation di manifold.
EngrStudent

Jawaban:

14

Untuk bagian pertama dari pertanyaan saya, saya menemukan perbandingan yang sangat berguna ini untuk kinerja metode interpolasi linier yang berbeda menggunakan pustaka python:

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

Di bawah ini adalah daftar metode yang dikumpulkan sejauh ini.

Interpolasi standar, kisi terstruktur:

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/

Kisi tidak terstruktur (tersebar):

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 proyek besar yang termasuk interpolasi:

https://github.com/sloriot/cgal-bindings (bagian dari CGAL, GPL berlisensi / LGPL)

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

Kisi jarang:

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 (Proses Gaussian):

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

General GPL berlisensi:

https://github.com/rncarpio/delaunay_linterp

Tasmania

Toolkit untuk Pemodelan Stokastik Adaptif dan Pendekatan Non-Intrusif - adalah pustaka yang tangguh untuk integrasi dan interpolasi dimensi tinggi serta kalibrasi parameter.

Mengikat Python untuk Tasmania:

https://github.com/rncarpio/py_tsg

https://github.com/sloriot/cgal-bindings (bagian dari CGAL, GPL berlisensi / LGPL)

denfromufa
sumber
2
Saya akan menambahkan bahwa paket DAKOTA yang sangat bagus dari sandia memiliki semua metode di atas diimplementasikan dan banyak lagi, dan itu memang menyediakan binding python. Ini mungkin bukan cara termudah untuk bangkit dan berjalan, tetapi ini adalah kedudukan tertinggi dan memberikan banyak opsi, dan patut untuk dicoba.
Aurelius
@ Aurelius, bisakah Anda tunjuk ke rutinitas interpolasi / aproksimasi dalam DAKOTA? Saya punya pengalaman dengan paket itu tetapi hanya memperhatikan surfpack (sudah ref-d di atas) untuk kriging.
denfromufa
@Aurelius semua model pendekatan dakota ada di surfpack
denfromufa
Ini adalah kartu as berdarah; sudah selesai dilakukan dengan baik!
Astrid