我花了相当多的时间试图找到一种简单的方法来做到这一点 - 理想情况下,一个神奇的图书馆存在于那里,它将采用我的3D数据点并在最佳拟合线上返回2点使用正交回归或最小二乘法,并返回拟合线的误差。这样的事情是否存在,若然,在哪里?
答案 0 :(得分:10)
这很容易做到,但要自己编写,你需要一个特征值求解器或奇异值分解。创建(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的最大奇异值。
在任何一种情况下,如果您希望计算数据点的误差,这将被定义为与相关线的正交距离。
答案 1 :(得分:1)
谷歌的“java线性最小二乘回归库”,您应该找到一些选项。一个是Drej。不过,我自己并没有用过它。
编辑 - 我不相信这回答了这个问题 - 我不知道是否支持3D数据。
答案 2 :(得分:1)
如果你知道诀窍,那就很容易做到:http://www.scribd.com/doc/21983425/Least-Squares-Fit
更多维度意味着更多系数,但它们很容易添加。这些想法都是一样的。