Какой метод многомерной интерполяции является наилучшим для практического использования? - PullRequest
11 голосов
/ 26 февраля 2009

В статье Питера Альфреда о многомерной интерполяции рассеянных данных он упомянул, что из множества схем только немногие действительно популярны среди практиков. Он назвал, например, метод Шепарда и Hardy Multiquadrics. Но этой статье уже почти 20 лет, и что действительно интересно, так это то, какие методы широко используются в наши дни.

Если у вас есть опыт использования некоторых схем пространственной интерполяции, расскажите об этом.

UPD: чтобы сделать этот вопрос более конкурентоспособным, я переформулировал его. Это было "Какие методы многомерной интерполяции вы когда-либо использовали?"

Ответы [ 5 ]

16 голосов
/ 08 апреля 2009

(Это будет долго, если я просто не выдохся.)

Сначала несколько замечаний о нерассеянных данных. (См. Ответ, который ссылается на littleCMS)

Существует два типа цветовой интерполяции, которые являются общими. Несколько лет назад трилинейная интерполяция (линейная интерполяция тензорного произведения) была распространенным подходом для интерполяции таблицы цветов. Трилинейная интерполяция действительно может быть реализована как последовательный набор одномерных интерполяций, сначала по одной оси, затем по второй оси и т. Д.

Много лет назад мы все поняли, что трилинейная интерполяция привносит артефакты в цветную визуализацию применительно к определенным типам преобразований. Проблемы видны в нейтралах. Решение состоит в том, чтобы перейти к симплициальному интерполанту, в 3-м, разделив куб на 6 тетраэдров. В n измерениях единичный куб будет разбит на факторные (n) симплексы. Существуют и другие разрезы куба, но этот конкретный стиль гарантирует, что главная диагональ всегда является общим ребром для всех симплексов. Это, в свою очередь, восстанавливает хорошее поведение нейтральных цветов применительно к определенным таблицам соответствия цветов.

Теперь позвольте мне перейти к вопросу об истинной интерполяции разбросанных данных.

Другие упоминали множество схем. Кригинг, мультиквадрики, дистанционные методы - это несколько. (Когда я в прошлом работал с этими схемами, я фактически предпочитал обратные многоквадратичные методы.) Все это на самом деле просто вариации методов радиальных базисных функций, общая схема. Методы RBF имеют свои плюсы и минусы. Они обычно генерируют гладкий интерполант, это, конечно, зависит от конкретной выбранной базисной функции, а также от того, хотите ли вы ограничить поддержку. Методы RBF также позволяют экстраполировать, по крайней мере, настолько, насколько будет расширяться поддержка радиальных базовых элементов. Если базовым элементам разрешено быть бесконечными по степени, то никакое явное ограничение на экстраполяцию не будет применяться. (Экстраполяция вообще плохая вещь.) Одна проблема с методами RBF состоит в том, что они требуют решения больших систем линейных уравнений, и эти системы уравнений часто являются плотными матрицами. Это означает, что размер проблемы, с точки зрения количества точек данных, которые вы можете обработать, обычно ограничивается линейной алгеброй. Если вместо этого вы ограничите поддержку путем усечения базовых элементов, то матрицы могут стать разреженными. Это улучшит линейную алгебру, если вы используете разреженный матричный пакет для решения. В то же время, расстояние поддержки становится нелинейным параметром, который вы должны контролировать. Кроме того, такие методы, как многоквадратичные и обратные многоквадратичные методы, могут иметь вторичный нелинейный параметр, который управляет формой базовых элементов. У Кригинга есть похожие проблемы, и я бы объединил все эти методы вместе.

Для решения этих проблем все эти методы, которые я классифицировал как варианты RBF, часто ограничены в количестве точек, которые они будут удобно обрабатывать. В зависимости от того, как вы справляетесь с вещами и объемом доступной памяти, этот предел часто может составлять порядка нескольких тысяч пунктов.

Еще одна проблема с общим классом методов RBF - это то, что я назову интраполяцией. Это неологизм, который я создал много лет назад, чтобы описать интерполяцию через относительно большую дыру в данных. На самом деле, часто могут возникать проблемы даже при интерполяции через меньшие дыры в данных. Эти методы, поскольку они в некоторой степени гладкие, могут вводить нежелательные экстремумы (большие пики или впадины) в интерполированную поверхность. Это общая проблема даже с 1-мерными интерполантами, часто рассматриваемая как кольцевые артефакты с кубическим сплайном или полиномиальными интерполантами, и, безусловно, наблюдаемая с интерполантами рядов Фурье. Проблема в более высоких измерениях состоит в том, чтобы даже признать, что это действительно произошло, поскольку построение поверхностей в более чем трех измерениях имеет тенденцию быть трудным.

Если у вас больше очков, чем этот предел, или если эти вызывающие артефакты неприемлемы, то другие методы часто являются лучшим выбором. Если вы хотите использовать линейный интерполятор, то простое решение в более высоких измерениях - начать с тесселяции данных. Таким образом, в 3-х измерениях тесселяция данных (обычно тесселяция Делоне) в тетраэдры. Это достаточно эффективно, и для этой цели можно найти множество инструментов. Тогда простая задача - интерполировать любую отдельную точку. Просто определите, в каком симплексе находится точка, вычислите барицентрические координаты как веса интерполяции внутри симплекса и сформируйте соответствующую линейную комбинацию значений функции в каждой вершине найденного симплекса. Это все очень быстро и эффективно.

Недостатком этих методов, основанных на тесселяции, является то, что они обычно ограничивают вас выпуклой оболочкой точек данных, и, как плохо, если ваши данные оказываются в невыпуклой области, то интерполант вполне может делать странные вещи в некоторые регионы вашего домена. Другая проблема со схемой, которую я упомянул выше, состоит в том, что интерполант будет только кусочно-линейным, но как только вы перейдете в более высокие измерения, все станет очень быстро. Можно найти другие методы для гладкой интерполяции, основанной на тесселяции, но они потребуют больше усилий и, следовательно, гораздо реже.

Основные компромиссы здесь должны быть очевидны. Если вам нужен гладкий интерполант и только несколько точек, то часто выбираются методы RBF. Они просты, просты в использовании и т. Д. Выбранный метод часто является просто вопросом удобства или даже привычкой. Если бы я использовал один инструмент раньше и был счастлив, я, вероятно, буду счастлив с ним снова. Поскольку вопрос заключался в том, какой метод является «наилучшим для практического использования», я укажу, что «лучший» - это очень субъективное слово при применении вне контекста. Каковы ваши цели в проблеме интерполяции? Каким набором навыков вы владеете? Какой набор инструментов вы знаете, как использовать? В какой среде вы будете работать? Все эти факторы будут влиять на ваш выбор лучшего метода.

Если у вас много точек данных, и скорость важна, но конечная гладкость не так важна, тогда вы обычно будете искать симплициальный интерполант. Конечно, если у вас достаточно очков, то кусочно-линейный характер зверя имеет меньшее значение. Кусочно-линейный интерполант здесь имеет большое преимущество в некоторых случаях, что он никогда не может генерировать экстремумы на вашей поверхности, которые не существовали в данных. Для некоторых проблем, например, характеристика цвета, это имеет первостепенное значение.

Еще одна проблема связана с шумом. Хотя наличие шума часто является сигналом о необходимости какого-либо сглаживания, сглаживание применяется не ко всем таким поверхностям. Любой оператор сглаживания также иногда сглаживает важные особенности данных. Это происходит потому, что мы можем думать о сглаживающем операторе как о фильтре нижних частот. Поведение на высокой частоте часто является шумом, но это также может быть просто острый палец ноги или плеча на моей поверхности, который я не могу позволить себе потерять. Если это проблема, то вы можете захотеть использовать интерполант даже при наличии иногда значительного шума. В этом случае я предполагаю, что самый простой интерполятор низшего порядка является лучшим. Гладкий, более глобальный интерполант также будет иметь тенденцию усиливать любой шум в данных, поэтому, если вы ищете интерполант с наименьшей дисперсией при наличии шума, он обычно будет линейным интерполантом.

Конечно, существует множество разновидностей тонких сплайновых пластин, интерполяционных или нет. Как только вы выходите за пределы одного измерения, ваши возможности также расширяются, по крайней мере, если вы готовы выполнять эту работу.

Я закончу здесь, прежде чем он превратится в книгу.

6 голосов
/ 26 февраля 2009

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

2 голосов
/ 26 февраля 2009

я видел только одно приложение в littleCMS коде (движок управления цветом с открытым исходным кодом).

в первый раз, когда я это проверил, он просто выполнил линейную интерполяцию по одной оси, а затем интерполировал между этим результатом и точкой на другой оси. я только что перезагружал его, и, кажется, намного более сложным. не может сравниться с упомянутой вами статьей, но, возможно, захотите проверить ее, она находится в файле cmslut.c.

1 голос
/ 02 марта 2009

Я работал со сглаживанием трехмерных рассеянных данных для обработки поверхности LINK . Это включало много точек, и я хотел получить очень гладкую поверхность, поэтому сначала процесс нашел наиболее подходящую поверхность второго порядка к данным, а затем фазу релаксации, где точки были установлены на поверхности. Это не интерполирующая поверхность к исходным данным, но это был способ оптимизировать порядок интерполяции.

Метод включал работу с кусочными областями, которые хорошо подходили для приближения второго порядка.

Другой интересной характеристикой метода является то, что точки были вершинами треугольников, и связь сохраняется во время сглаживания.

...