利用矩阵 SVD 分解,拟合直线与平面
SVD 分解
奇异值分解(Singular Value
Decomposition,以下简称SVD)就是解决最小二乘法的利器,它不仅可以拟合直线、平面,还可以得到点云的最小包围盒。关于 SVD 与最小二乘的数学原理和关联,可以直接网上搜索查找,资料大把。本文主要讲解其几何意义和代码实现。
首先,我们可以将一大堆需要拟合点的坐标(x,y,z),组成一个 n 行三列的矩阵 A(需要提前减去平均值(\(x_0,y_0,z_0\))
,即点云的中心与(0,0,0)对齐)也就是去中心化, 然后进行 SVD 分解,得到三个矩阵 \(U\Sigma V^T\)
,矩阵V的第一列(Column)即是直线的方向向量,而第三列就是平面的法线向量。
几何意义来看
让我们先从二维上一个圆说起:
假设一堆点,组成了一个椭圆(图右上角),如果我们要拟合直线,就需要找到这个椭圆的长轴。而矩阵 A 的含义就是,将一个标准圆,经过变换得到我们要拟合的椭圆。
ACM 的解释有意思可以看看
https://www.ams.org/publicoutreach/feature-column/fcarc-svd
奇异值分解(Singular Value Decomposition,SVD)是一种在线性代数中重要的矩阵分解方法。对于一个矩阵A,SVD将其分解为三个矩阵的乘积,即:A = UΣV^T1。
在这个分解中,U和V都是正交矩阵,Σ是一个对角矩阵,对角线上的元素称为奇异值,且按降序排列。奇异值反映了矩阵A在相应维度上的“能量”或“强度”2。
右奇异向量(即矩阵V中的列向量)可以被看作是原始数据空间中的新特征。这是因为,对于一个mn的矩阵A,我们可以通过计算A^TA得到一个nn的方阵,然后对这个方阵进行特征值分解,得到的特征向量就是右奇异向量1。
这些右奇异向量描述了数据的主要变化方向。特别地,对于高维数据,我们可以通过选择前N个最大的奇异值对应的右奇异向量,来近似描述数据的主要变化方向1。
因此,右奇异向量可以被看作是数据的方向,而对应的奇异值则表示了这个方向的重要性1。这就是为什么一组数据经过SVD得到的右奇异向量可以看作这组数据的方向的原因。希望这个解释对你有所帮助!
源: 与必应的对话, 2024/4/25
(1) 强大的矩阵奇异值分解(SVD) - 知乎. https://zhuanlan.zhihu.com/p/122259109.
(2) 降维算法之奇异值分解 (Singular Value Decomposition, SVD) - CSDN博客. https://blog.csdn.net/qq_39297053/article/details/136596791.
(3) 特征向量与奇异向量 - 知乎. https://zhuanlan.zhihu.com/p/297714734.
(4) 对称矩阵奇异值分解得到的左奇异矩阵和右奇异矩阵一定相等吗? - 知乎. https://www.zhihu.com/question/497528522.
个人理解
我们输入一组数据的矩阵A可以得到数据的空间示意图:例如
标签:SVD,矩阵,分解,奇异,https,向量 From: https://www.cnblogs.com/kz7430/p/18156377