[透彻理解]由最小二乘到SVD分解
文章目录
借鉴的材料:
https://www.cnblogs.com/hxjbc/p/7443630.html
https://blog.youkuaiyun.com/macer3/article/details/48394239/
https://zhuanlan.zhihu.com/p/57803955
前言:最近在整理项目资料,其中有一个三维点云地面部分的提取。关于其理论,在此做一个整理。
1 问题引入:二维直线的拟合问题
假设我们有: A : ( 1 , 2 ) , B : ( 0 , 2 ) , C : ( 2 , 3 ) A:(1,2),B:(0,2),C:(2,3) A:(1,2),B:(0,2),C:(2,3)三个点,现在需要对这个三个点拟合一条直线。
设这条直线的方程为 y = a x + b y=ax+b y=ax+b 。我们希望这条直线可以同时通过这三个点,也就是这条直线的参数要满足:
{ 1 × k + b = 2 0 × k + b = 2 2 × k + b = 3 \left\{ \begin{array}{l} 1 \times k + b = 2\\ 0 \times k + b = 2\\ 2 \times k + b = 3 \end{array} \right. ⎩⎨⎧1×k+b=20×k+b=22×k+b=3
这是一个超定方程。为了后面表示方便,在这里我们用 x 1 , x 2 x_1,x_2 x1,x2来代替 k , b k,b k,b。
{ 1 × x 1 + x 2 = 2 0 × x 1 + x 2 = 2 2 × x 1 + x 2 = 3 \left\{ \begin{array}{l} 1 \times {x_1} + {x_2} = 2\\ 0 \times {x_1} + {x_2} = 2\\ 2 \times {x_1} + {x_2} = 3 \end{array} \right. ⎩⎨⎧1×x1+x2=20×x1+x2=22×x1+x2=3
写成矩阵的形式:
[ 1 1 0 1 2 1 ] [ x 1 x 2 ] = [ 2 2 3 ] ↑ ↑ ↑ A × x = b \begin{array}{l} \left[ \begin{array}{l} 1\,\,\,\,1\\ 0\,\,\,1\\ 2\,\,\,1 \end{array} \right]\left[ \begin{array}{l} {x_1}\\ {x_2} \end{array} \right] = \left[ \begin{array}{l} 2\\ 2\\ 3 \end{array} \right]\\ \,\,\,\,\,\,\,\,\, \uparrow \,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, \uparrow \,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, \uparrow \\ \,\,\,\,\,\,\,A\,\,\, \times \,\,\,\,\,\,x\,\,\,\,\,\, = \,\,\,\,\,\,\,b\,\, \end{array} ⎣⎡110121⎦⎤[x1x2]=⎣⎡223⎦⎤↑↑↑A×x=b
这即是我们要优化的非齐次线性方程组 A x = b Ax=b Ax=b。
为了方便我们接下来的理解,现在将其拆分成下面这种形式:
[ 1 0 2 ] × x 1 + [ 1 1 1 ] × x 2 = [ 2 2 3 ] ↑ ↑ ↑ a 1 × x 1 + a 2 × x 2 = b \begin{array}{l} \left[ \begin{array}{l} 1\\0\\2 \end{array} \right] \times {x_1} + \left[ \begin{array}{l} 1\\1\\1 \end{array} \right] \times {x_2} = \left[ \begin{array}{l} 2\\2\\3 \end{array} \right]{\mkern 1mu} \\ {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} \uparrow {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} \,\,\,\,\,\,\,\,\,\,{\mkern 1mu} {\mkern 1mu} {\mkern 1mu} \,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\uparrow {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} \,\,\,\,\,\,\,\,\,\,{\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} \,\,\,\,\,\,\,\,\,\,\,\,\uparrow \\ {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} {a_1}{\mkern 1mu} {\mkern 1mu} \,\, \,\,\,\,\times \,\,\,\,{x_1}{\mkern 1mu} \, + {\mkern 1mu} {\mkern 1mu} \,\,{a_2}{\mkern 1mu} \times {x_2}{\mkern 1mu} {\mkern 1mu} = {\mkern 1mu} {\mkern 1mu} {\mkern 1mu} \,\,\,\,b \end{array} ⎣⎡102⎦⎤×x1+⎣⎡111⎦⎤×x2=⎣⎡223⎦⎤↑↑↑a1×x1+a2×x2=b
这里的理解方式是,两个3维向量,经过 x 1 x_1 x1和 x 2 x_2 x2的线性组合之后,得到 b b b向量。
这里更高级一点的说法是,在以 a 1 , a 2 a_1,a_2 a1,a2为基向量(3维)所张成的2维子空间上,寻找最接近 b b b向量的向量。
把 a 1 , a 2 a_1,a_2 a1,a2视作基向量,画图理解。
由这个图可知,公式(4)肯定是不成立的,因为向量 b b b(红色)就不在基向量 a 1 , a 2 a_1,a_2 a1,a2所张成的二维平面(二维子空间)里。
所以,我们在这里退而求其次,在该二维子空间中找一个向量 b ′ b' b′(由基向量组成 b ′ = x 1 ∗ a 1 + x 2 ∗ a 2 b'=x_1*a_1+x_2*a_2 b′=x1∗a1+x2∗a2),来代替向量 b b b,但是这个向量距离 b ′ b' b′到向量 b b b的距离最短(如下图所示)
如图所示, O E = b ′ , O D = b OE=b',OD=b OE=b′,OD=b,显而易见, b ′ b' b′是 b b b向此二维平面的正交投影,此时 b ′ b' b′和 b b b之间的距离最近,距离差值维 D E DE DE的长度。
而此时 b ′ = x 1 ∗ a 1 + x 2 ∗ a 2 = x 1 O C + x 2 O B b'=x_1*a_1+x_2*a_2=x_1OC+x_2OB b′=x1∗a1+x2∗a2=x1OC+x2OB, x 1 , x 2 x_1,x_2 x1,x2就是我们需要求出的值。
更进一步的理解。当有n组数据带入时,A矩阵的维度将会是n×2.那么这里整个最小二乘拟合问题就可以理解成: a 1 , a 2 a_1,a_2 a1,a2是n维线性空间中的两个线性无关的向量,在span{ a 1 , a 2 a_1,a_2 a1,a2}所张成的子空间中(2维)找到 b b b在其中的正交投影 b ′ b' b′,二者之间的距离即是最小二乘优化的最小值min。 b ′ b' b′在基 a 1 , a 2 a_1,a_2 a1,a2上的投影,即是要求解的变量值,
如果需要拟合的变量不止2个,假设有m个,那么整个问题就可以理解成是n维向量到m维超平面的正交投影求解。
回到公式(3)中来,对其的求解,有以下方法。
A x = b A T A x = A T b x = ( A T A ) − 1 A T b Ax=b \\ A^{T} A x=A^{T}b \\ x=(A^{T} A)^{-1}A^{T}b Ax=bATAx=ATbx=(ATA)−1ATb
按照道理来说,此时我们已经解决问题了。但是众所周知,对于高维度的矩阵,计算机进行求逆操作是非常慢的,问题就出在实际应用中,点云地面的拟合,可能是几千上万个点,这样就会导致A矩阵的维度很高,显然直接求逆操作在此时是不可行的。所以,如何快速求解 A x = b Ax=b Ax=b是下一个要解决的问题,即SVD分解。
2 实际问题1:点云的地面拟合
2.1 解法1.分解协方差矩阵
其算法理论基于论文:Zermas, D., Izzat, I., & Papanikolopoulos, N. (2017). Fast segmentation of 3D point clouds: A paradigm on LiDAR data for autonomous vehicle applications. Proceedings - IEEE International Conference on Robotics and Automation, 5067–5073. https://doi.org/10.1109/ICRA.2017.7989591</