Math 非函数线的线性回归/寻线

Math 非函数线的线性回归/寻线,math,geometry,numerical,Math,Geometry,Numerical,我想找到一条线,它周围有很多点。直线位于二维空间中,由两点或一点和一个角度定义。它的算法是什么 关于这一点,在互联网上和数字媒体上都有很多,但所有的例子都集中在直线(y=ax+b)的函数形式上,这对于(几乎)垂直直线来说是不好用的 我可能检测到直线是更水平还是更垂直,在另一种情况下交换坐标,但可能存在更优雅的解决方案 我使用的是C#ATM,但可能可以从任何代码进行翻译。很抱歉,我无法提供参考,但以下是如何: 假设N(2d)个数据点是p[],并且希望找到一个向量a和一个标量d来最小化 E = Su

我想找到一条线,它周围有很多点。直线位于二维空间中,由两点或一点和一个角度定义。它的算法是什么

关于这一点,在互联网上和数字媒体上都有很多,但所有的例子都集中在直线(y=ax+b)的函数形式上,这对于(几乎)垂直直线来说是不好用的

我可能检测到直线是更水平还是更垂直,在另一种情况下交换坐标,但可能存在更优雅的解决方案


我使用的是C#ATM,但可能可以从任何代码进行翻译。

很抱歉,我无法提供参考,但以下是如何:

假设N(2d)个数据点是p[],并且希望找到一个向量a和一个标量d来最小化

E = Sum{ i | sqr( a'*p[i] - d) }/N
(直线是{q | a'*q=d}E是数据点到直线距离的平方和)

一些乏味的代数表明

 E = a'*C*a + sqr(d - a'*M)
其中M是数据的平均值,C是协方差,即

 M = Sum{ i | p[i] } / N
 C = Sum{ i | (p[i]-M)*(p[i]-M)' } / N
通过选择d=a'*M,将E最小化,并且a是对应于较小特征值的C的特征向量

因此,算法是:

计算M和C

求C的较小特征值和相应的特征向量a

计算d=a'*M


(请注意,同样的方法也适用于更高的维度。例如,在3d中,我们会找到“最佳”平面)。

下面是示例。或者,如果你喜欢的话。根据你使用的特征向量的数量,你也可以得到3D中最好的线条。谢谢你。看起来我将很难将其转换为代码,但我会尝试让您知道我做得有多好。