Установить 3D-линию для данных 3D-точек в Java? - PullRequest
8 голосов
/ 28 февраля 2010

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

Ответы [ 3 ]

10 голосов
/ 01 марта 2010

Это достаточно просто сделать, но чтобы написать это самостоятельно, вам понадобится решатель по собственным значениям или разложение по сингулярным значениям. Создайте nx3 матрицу A ваших данных (x-xbar, y-ybar, z-zbar) в виде столбцов. Сохраните эти средства столбцов на потом, я назову это V0 = [xbar, ybar, zbar].

Теперь вычислим собственные значения и собственные векторы A '* A, то есть матрицу 3x3, сформированную из транспонирования A, умноженную на A.

Если эти данные лежат на линии в R ^ 3, то одно из этих собственных значений будет значительно больше, чем два других собственных значения. Если это не так, то линия ортогональной регрессии не будет хорошо оценена.

Возьмем собственный вектор, который связан с наибольшим собственным значением A '* A. Тогда, если V является соответствующим собственным вектором, линия ортогональной регрессии определяется как

V (t) = V0 + t * V

Любая точка на этой линии может быть задана некоторым значением параметра t.

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

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

1 голос
/ 28 февраля 2010

Это достаточно легко сделать, если вы знаете хитрость: http://www.scribd.com/doc/21983425/Least-Squares-Fit

Чем больше размерностей, тем больше коэффициентов, но их достаточно легко добавить. Идеи все те же.

1 голос
/ 28 февраля 2010

Google для "библиотеки регрессии Java линейных наименьших квадратов", и вы должны найти несколько вариантов. Одним из них является Drej . Я сам этим не пользовался.

РЕДАКТИРОВАТЬ - я не уверен, что это отвечает на вопрос - я не знаю, поддерживаются ли 3D-данные.

...