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