Каков предпочтительный и эффективный подход для интерполяции многомерных данных?


22

Каков предпочтительный и эффективный подход для интерполяции многомерных данных?

Вещи, о которых я беспокоюсь:

  1. производительность и память для построения, единичная / пакетная оценка
  2. размеры обработки от 1 до 6
  3. линейный или более высокого порядка
  4. возможность получения градиентов (если не линейная)
  5. обычная или рассеянная сетка
  6. используя в качестве функции интерполяции, например, чтобы найти корни или минимизировать
  7. возможности экстраполяции

Существует ли эффективная реализация этого с открытым исходным кодом?

У меня была частичная удача с scipy.interpolate и кригингом из scikit-learn.

Я не пробовал сплайны, чебышевские полиномы и т. Д.

Вот что я нашел на эту тему:

Python 4D линейная интерполяция на прямоугольной сетке

Быстрая интерполяция трехмерных данных с регулярной выборкой с различными интервалами по x, y и z

Быстрая интерполяция регулярных данных сетки

Какой метод многомерной рассеянной интерполяции является наилучшим для практического использования?


1
Для чего вам нужна ваша интерполяция? Как ваши входные данные? Я не думаю, что размерность сильно меняет проблему.
Никогуаро

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_coordinates.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 для Tasmanian:

https://github.com/rncarpio/py_tsg

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


2
Я добавлю, что в отличном пакете DAKOTA от sandia реализованы все перечисленные выше методы и многое другое, и он обеспечивает привязку к python. Возможно, это не самый простой способ запустить и запустить, но он на высшем уровне, дает много возможностей и его стоит проверить.
Аврелий

@ Аврелий, не могли бы вы указать на процедуры интерполяции / аппроксимации в DAKOTA? У меня есть опыт работы с этим пакетом, но я заметил только сурфпак (уже упомянутый выше) для кригинга.
denfromufa


@ Аврелий, все модели аппроксимации Дакоты находятся в сёрфпаке
denfromufa

Это кровавый туз; отлично сработано!
Астрид
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.