аппроксимация многомерной функции

Natasha80

Есть 1000 точек в N-мерном пространстве и значения функции в этих точках. Нужно приблизить функцию по этим точкам (точнее, как-то разумно построить новую более-менее ориентируясь на заданные значения). Точное прохождение через точки не требуется. Какие знаете методы? Чем больше тем лучше.

griz_a

Интерполяционный многочлен Лагранжа от N переменных :umnik:

griz_a

Это я, как бы, намекаю, что класс функций хорошо бы задать

Natasha80

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

Niklz

ну вот такой тогда тебе очень гибкий класс аппроксимирующих функций:
[math]  $   f(\mathbf{x}) = \sum_{i=1}^{1000} y^{(i)} \mathbf{I}_{\mathbf{x} = \mathbf{x}^{(i)}} + g(\mathbf{x})  $  [/math]
где x^i, y^i - твоя выборка экспериментальных данных и I - индикаторная функция и g(x) - произвольная функция равная нулю в точках x^i.
Подойдет?

griz_a

Забыл добавить произвольную функцию, равную нулю в x_i :)

Suebaby

забыл также, что
Точное прохождение через точки не требуется

Sergey79

Думаю, отлично подойдет сфера в N-мерном пространстве с радиусом, равным среднему расстоянию от нуля до всех точек.

Natasha80

Нужно "разумно" приблизить точки. Буду использовать методы для прогнозов. Но меня не интересует математическая-эконометрическая точность, интересно попробовать побольше разных методов. Уверен, форумчане вспомнят много чего любопытного. Для тех кто считает термин "разумно" не термином - предлагайте гладкие аппроксимации. Правда, без требования прохождения функции через точки вам все равно будет тяжело =)

griz_a

Да нет никаких методов для прогнозов общего вида функции, приближающей облако точек в пространстве.
Все зависит либо от конкретики данных, либо от физических соображений о данных. Без данных и без физических истоков данных эта задача "Мою сестру зовут Женя, а как зовут моего брата?"

kukuev

Есть 1000 точек в N-мерном пространстве и значения функции в этих точках. Нужно приблизить функцию по этим точкам (точнее, как-то разумно построить новую более-менее ориентируясь на заданные значения). Точное прохождение через точки не требуется. Какие знаете методы? Чем больше тем лучше.
Я такую вещь делаю фитированием с помощью пакета mpfit в IDL(very similar to mathlab). Там реализован метод максимального правдопободия, он же метод минимума невязок.
На практике я ввожу вид искомой функции, известные значения точек (x, y, z, ... а программа вычисляет неизвестные коэффициенты в искомой функции заданного вида и их ошибки.
Или ты даже примерного вида функции не знаешь, которой хочешь аппроксимировать? Тогда сложнее задача.

Vikuschechka9

в общем, типичный machine learning, регрессионный анализ итд
в пакетах вроде R очень удобно всё это делать

griz_a

Ну вот ты тут сделал смелые предположения
а) Что ему пофиг на робастность
б) Что он знает как распределены отклонения от его поверхности.
в) Что он представляет вид своей поверхности
г) Что его интересует подгонка в общей массе, а не на периферии, допустим.
д) Что N это 3,4,5, но никак на 15-20-100.
е ж з и).... я a b... ,z [math]$ \alpha...,\omega) $[/math]

kukuev

Ну да, автор много чего не уточнил. Просто мне самому пара лет назад встретилась схожая задача:
Есть 100 точек в N-мерном(N от 3 до 20, мне надо было проанализировать все модели) пространстве и значения функции в этих точках. Нужно приблизить функцию по этим точкам (точнее, как-то разумно построить новую более-менее ориентируясь на заданные значения, вид функции задавался теорией, зависел от N). Точное прохождение через точки не требуется.
И вот её я уже решал.

griz_a

Если эта вся формулировка задачи, то ты тоже начал решать задачу, не разобравшись в чем она состоит.
Если модель допускает выбросы, ОМП методы будут плохо себя вести. ОМП без какой-то регулярности модели вообще довольно мерзкая штука. Это глобальный максимум, правдоподобие может максимизироваться на всплеске, а вокруг всплеска все плохо. Нужно либо исходить из более устойчивых методов, либо подбирать много поверхностей на поднаборах, а потом выбирать как бы "медиану"
Если про распределение разбросов нельзя принять гипотезы о, допустим, нормальности, то непонятно чье омп максимизируется и решение кривое.
Ну и плюс, как я уже говорил, неясно с чего из этой формулировки следует, что надо максимизировать в районе массы, а не заботиться, допустим, о хвостах.
Можно продолжать далее.
Мораль: не надо решать задачу, не поняв в чем она заключается. Не надо рассказывать человеку, как решать задачу, пока он не смог сообщить, в чем задача заключается. Если человек дал трактовку задачи, которую можно понять пятью тысячами способов и хочет, чтобы ему рассказали решения всех 5000 задач, то надо послать его уточнять задачу.

Natasha80

Моя цель - повысить эрудицию в этой области. Про прогноз говорил, чтоб задать какой-то критерий "разумности". Нет заданного вида функции, нет конкретных размерностей, 1000 - число с потолка, ничего робастно/несмещенно прогнозировать не нужно.
Например, кривые Безье строятся по опорным точкам, задающим "примерную" форму кривой. Интересно, как подобное можно делать с функциями.
Это вопрос, а не конкретная задача. Можно максимизировать в районе массы, заботиться о хвостах, вспоминать методы не из статистики, а из компьютерной геометрии и др. областей. Я согласен, что вопрос общий и расплывчатый, так что бесполезно меня в этом убеждать)
Приведу пример аппроксимации:
F(x) = Sum_k ( w_k*F(x_k / Sum_k ( w_k )
где w_k = ( 1/dist(x,x_k) )^p, p>0
k от 1 до 1000, F(x_k) - известные значения функции.
Фрау, если знаешь 5000 способов - напиши любые 3 интересных на твой взгляд, это будет отличным ответом.

griz_a

Повышать эрудицию можно в какой-то конкретной области, а не вообще. Вот, скажем, захочешь ты эрудицию в математике поднять и попросишь привести теоремы, кто какие знает. Для повышения эрудиции. Глупо, правда?
Вот и тут также. Можно, например, почитать про регрессионный анализ, про кластерный анализ, про интерполяцию сплайнами или метод конечных элементов, etc, но вся проблема в таком представлении - это задача десяти разных дисциплин и в этой области нельзя так вот взять и повысить эрудицию.
Если хочешь три - держи
Минимизировать функционал [math]$f(x,y,\theta)=\sum\limits_{i=1}^{1000} g(y_i-f(x_i,\theta$[/math], где [math]$\theta$[/math] - многомерный параметр, [math]$g(x)$[/math] - какая-нибудь функция из R, [math]$f(x,\theta)$[/math] - подозрительное на подходящесть семейство функций N-мерных функций. Если взять g=x^2, то будем МНК, если |x| - более устойчивый метод и т.п.
Кластеризовать данные шарами в N-мерном пространстве и брать функцию как взвешенную за счет расстояний до центров кластеров сумму средних значений по кластерам. Предполагается, что за пределы исходного набора X мы функцию не продолжаем.
Разбить на участки и строить что-то типа многомерного сплайна с не очень большим числом элементов.

ereyzer

Можно с помощью нейронный сетей аппроксимировать. Например, многослойным перцептроном с N входами (аргументы) и одним выходом (значение функции). На мой взгляд, один из самых простых способов, если неизвестен класс функций.
Оставить комментарий
Имя или ник:
Комментарий: