Який переважний та ефективний підхід для інтерполяції багатовимірних даних?


22

Який переважний та ефективний підхід для інтерполяції багатовимірних даних?

Що мене хвилює:

  1. продуктивність і пам'ять для побудови, одиночне / пакетне оцінювання
  2. розміри обробки від 1 до 6
  3. лінійного або вищого порядку
  4. можливість отримання градієнтів (якщо не лінійних)
  5. регулярна проти розсіяної сітки
  6. використовуючи як функцію інтерполяції, наприклад, для пошуку коренів або мінімізації
  7. екстраполяційні можливості

Чи є ефективна реалізація цього з відкритим кодом?

Мені частково пощастило з scipy.interpolate та kriging від scikit-learn.

Я не пробував сплайни, Чебишевські поліноми тощо.

Ось що я знайшов поки що з цієї теми:

Лінійна інтерполяція Python 4D на прямокутній сітці

Швидка інтерполяція регулярно відібраних 3D-даних з різними інтервалами у x, y та z

Швидка інтерполяція даних звичайної сітки

Який метод багатоваріантної розсіяної інтерполяції найкращий для практичного використання?


1
Для чого ти хочеш своєї інтерполяції? Як ваші вхідні дані? Я не думаю, що розмірність сильно змінює проблему.
nicoguaro

2
На жаль, багатоваріантна інтерполяція не така нарізана і висушена, як одноваріантна. Наприклад, в 1D ви можете вибрати довільні інтерполяційні вузли (доки вони взаємно відрізняються) і завжди отримати унікальний інтерполяційний поліном певної міри. Вже в 2D це неправда, і, можливо, у вас не буде чітко визначена поліпоміальна інтерполяція, залежно від того, як ви обираєте свої вузли. Отже, коротко кажучи, ви повинні дати нам більше інформації про структуру ваших даних, щоб отримати корисні дані.
cfh

1
Ось опитування багатоваріантного поліноміального наближення, якщо ви хочете скористатися таким підходом: Gasca & Sauer, "Інтерполяція полінома у кількох змінних", 2000 citeseerx.ist.psu.edu/viewdoc/…
cfh

3
Поліноми Чебишева на розрідженій (наприклад, Смоляцькій) сітці дуже швидкі для більших розмірів. Точки сітки - це заздалегідь визначений підмножина точок Чебишева. Деякі реалізації: tasmanian.ornl.gov , ians.uni-stuttgart.de/spinterp/about.html , github.com/EconForge/Smolyak
Роналду Карпіо

1
Ви можете спробувати щось на зразок тестеляції Делоне на колекторі.
EngrStudent

Відповіді:


14

У першій частині мого запитання я знайшов це дуже корисним порівнянням для виконання різних методів лінійної інтерполяції з використанням бібліотек python:

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

Нижче наведено перелік методів, зібраних до цих пір.

Стандартна інтерполяція, структурована сітка:

http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.ndimage.interpolation.map_coordinate.html

http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.RegularGridInterpolator.html

https://github.com/rncarpio/linterp/

Неструктурована (розсіяна) сітка:

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 великих проекти, які включають інтерполяцію:

https://github.com/sloriot/cgal-bindings (частини CGAL, ліцензовані GPL / LGPL)

https://www.earthsystemcog.org/projects/esmp/ (Ліцензія Університету Іллінойсу-NCSA ~ = MIT + BSD-3)

Рідкі сітки:

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

Кригінг (Гауссовий процес):

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

Загальна ліцензія GPL:

https://github.com/rncarpio/delaunay_linterp

Тасманійський

Інструментарій для адаптивного стохастичного моделювання та неінструзивного наближення - є надійною бібліотекою для інтеграції та інтерполяції високих розмірів, а також для калібрування параметрів.

Зв'язування Python для тасманійського:

https://github.com/rncarpio/py_tsg

https://github.com/sloriot/cgal-bindings (частини CGAL, ліцензовані GPL / LGPL)


2
Додам, що дуже чудовий пакет DAKOTA від Sandia має всі перераховані вище методи та багато іншого, і він забезпечує прив'язку пітона. Можливо, це не найпростіше встати та працювати, але це найкраще місце і дає безліч варіантів, і його варто перевірити.
Аврелій

@Aurelius, чи можете ви вказати на інтерполяцію / наближення в рамках DAKOTA? Я маю досвід роботи з цим пакетом, але помітив лише surfpack (вже ref-d вище) для крігінгу.
denfromufa


@Aurelius всі моделі наближення дакоти знаходяться в surfpack
denfromufa

Це кривавий туз; молодець!
Астрід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.