Набор данных Curve Fitting 3D - PullRequest
       24

Набор данных Curve Fitting 3D

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

Проблема подгонки кривой для двумерных данных хорошо известна (НИЗКАЯ и т. Д.), Но, учитывая набор точек трехмерных данных, как мне подогнать трехмерную кривую (например, сплайн сглаживания / регрессии) к этим данным?

БОЛЬШЕ: Я пытаюсь найти кривую, соответствующую данным, представленным векторами X, Y, Z, которые не имеют никакого отношения. По сути, у меня есть 3D-облако точек, и мне нужно найти 3D-линию тренда.

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

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

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

3D облако точек и локальные центроиды http://img510.imageshack.us/img510/2495/40670529.jpg

Ответы [ 5 ]

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

С похожими вопросами можно ознакомиться здесь:

Простая подгонка многомерных кривых

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

1 голос
/ 25 июня 2009

Вы можете попробовать добавку (то есть модели с одним индексом), как GAM http://www -stat.stanford.edu / Программное обеспечение / гам / index.html

это жадный подход, очень масштабируемый, хорошо реализованный в нескольких пакетах R

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

Это зависит от того, что вы подразумеваете под этим. Если у вас есть набор точек f (x, y) -> z и вы хотите найти функцию, которая ударит их все, вы можете просто сделать сплайн.

Если у вас есть известная функция и вы хотите отрегулировать параметры, чтобы минимизировать среднеквадратичную ошибку, просто рассмотрите x, ya составной объект p (например, как если бы он был сложным или 2-векторным) и используйте аналог 2-й случай на f (p) -> z.

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

- MarkusQ

Итак, с учетом отредактированной постановки задачи я бы предложил следующее:

  • Если это временной ряд (подразумеваемый вашим использованием термина «линия тренда»), я бы посмотрел на то, чтобы рассматривать его как три параметрические функции (x (t), y (t), z (t)) и выполнять 2d примерка на каждом из них.
  • В качестве альтернативы (но все еще в предположении упорядоченного ряда), вы можете найти линейное приближение (линию через сердце облака) и затем добавить к этому какую-то (вероятно, полярную) функцию, основанную на перпендикулярной проекции из точки на линию.
  • Если это не временной ряд (подразумеваемый фразами «нет известного отношения» и «облако точек»), вы должны определить, какую «кривую» вы хотите им вписать. Вы хотите линию? Поверхность / коллектор? Вы хотите, чтобы он был функцией одной или двух переменных или не зависел от них (скажем, выпуклая оболочка). Должно ли оно быть гладким, ограниченным по степени или ...?

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

0 голосов
/ 25 февраля 2011

Я бы попробовал использовать эвристику кривой заполнения пространства. Например, сортируйте точки по порядку их посещения по кривой заполнения пространства. Одним из решений вашей проблемы будет сплайновая кривая между точками, взятыми в указанном порядке. Чтобы получить более короткую и гладкую кривую (но большее среднеквадратичное расстояние от точек до кривой), вы можете заставить сплайн проходить только через каждую k-ю точку. Вы могли бы улучшить кривую, если после выбора каждой k-й точки вы искали более короткий гамильтонов путь через них (например, задача коммивояжера, но для открытых путей). Вы также можете настроить сплайн-узлы, чтобы уменьшить среднеквадратичное расстояние. При расчете среднеквадратичного расстояния я использовал бы порядок кривой заполнения пространства, чтобы указать, какая часть сплайна, вероятно, будет ближайшей к данной точке.

0 голосов
/ 07 апреля 2009

Есть новая очень хорошая работа Чарльза Феффермана (да - призер Филдса) и Вооза Клартага:

Вы можете найти их обоих в формате pdf на странице публикаций Клартага

...