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