【问题标题】:Linear regression / line finding for non-function lines非功能线的线性回归/线查找
【发布时间】:2016-02-15 17:37:52
【问题描述】:

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

在 SO 和 Internet 以及 Numerical Receipes 中有很多关于此的内容,但所有示例似乎都集中在行 (y=ax+b) 的函数形式上,这对于(几乎)垂直的行不通行。

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

我正在使用 C# ATM,但可能可以从任何代码翻译。

【问题讨论】:

    标签: math geometry numerical


    【解决方案1】:

    很抱歉,我无法提供参考,但方法如下:

    假设你的 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 中,我们会找到“最佳”平面)。

    【讨论】:

    • 这里是reference。或者,如果您更喜欢 Wikipedia article。根据您使用的特征向量数量,您还可能获得 3D 中的最佳线条。
    • 谢谢你。看起来我很难将其转换为代码,但我会尽力让你知道我做得有多好。
    猜你喜欢
    • 2021-03-24
    • 2017-06-17
    • 2012-09-17
    • 2013-10-25
    • 1970-01-01
    • 2018-01-06
    • 2015-01-02
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多