【发布时间】:2011-01-22 01:48:33
【问题描述】:
我花了相当多的时间试图寻找一种简单的方法来做到这一点 - 理想情况下,一个神奇的库存在于某个地方,它将获取我的一组 3D 数据点并在最佳拟合线上返回 2 个点使用正交回归或最小二乘法,并返回拟合线的误差。这样的事情是否存在,如果存在,在哪里?
【问题讨论】:
标签: java math 3d data-fitting
我花了相当多的时间试图寻找一种简单的方法来做到这一点 - 理想情况下,一个神奇的库存在于某个地方,它将获取我的一组 3D 数据点并在最佳拟合线上返回 2 个点使用正交回归或最小二乘法,并返回拟合线的误差。这样的事情是否存在,如果存在,在哪里?
【问题讨论】:
标签: java math 3d data-fitting
这很容易做到,但要自己编写,您需要一个特征值求解器或奇异值分解。将 (x-xbar, y-ybar, z-zbar) 数据的 nx3 矩阵 A 创建为列。保存这些列意味着以后,我将其称为 V0 = [xbar,ybar,zbar]。
现在,计算 A'*A 的特征值和特征向量,即 A 转置乘以 A 形成的 3x3 矩阵。
如果此数据位于 R^3 中的一条线上,则其中一个特征值将明显大于其他两个特征值。如果这不是真的,那么正交回归线将不会被很好地估计。
取与 A'*A 的最大特征值相关联的特征向量。那么如果V是对应的特征向量,则正交回归线定义为
V(t) = V0 + t*V
该线上的任何点都可以由参数 t 的某个值给出。
或者,计算A的奇异值分解,并取A的最大奇异值对应的右奇异向量。
在任何一种情况下,如果您希望计算数据点的误差,这将被简单地定义为与相关直线的正交距离。
【讨论】:
Google 搜索“java 线性最小二乘回归库”,您应该会找到一些选项。一个是Drej。不过我自己没用过。
编辑 - 我不确定这是否能回答问题 - 我不知道是否支持 3D 数据。
【讨论】:
如果你知道诀窍,这很容易做到:http://www.scribd.com/doc/21983425/Least-Squares-Fit
更多的维度意味着更多的系数,但它们很容易添加。想法都是一样的。
【讨论】: