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

22

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

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

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

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

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

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

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

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

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

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

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

denfromufa
источник
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)

denfromufa
источник
2
Я добавлю, что в отличном пакете DAKOTA от sandia реализованы все перечисленные выше методы и многое другое, и он обеспечивает привязку к python. Возможно, это не самый простой способ запустить и запустить, но он на высшем уровне, дает много возможностей и его стоит проверить.
Аврелий
@ Аврелий, не могли бы вы указать на процедуры интерполяции / аппроксимации в DAKOTA? У меня есть опыт работы с этим пакетом, но я заметил только сурфпак (уже упомянутый выше) для кригинга.
denfromufa
хорошо, я нашел это - dakota.sandia.gov/sites/default/files/docs/6.0/html-ref/…
denfromufa
@ Аврелий, все модели аппроксимации Дакоты находятся в сёрфпаке
denfromufa
Это кровавый туз; отлично сработано!
Астрид