特征值,特征向量,SVD分解,PCD分解

本文探讨了矩阵的特征值、特征向量及其性质,包括特征值分解与奇异值分解(SVD)的关系,以及如何通过主成分分析(PCA)实现数据降维。重点介绍了特征值的计算、特征向量的性质以及PCA中的旋转矩阵由SVD提供。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特征值,特征向量:

 对于n阶方阵A,在A张成的空间里,存在非零向量v, 该向量转换到A张成的空间时,方向不变,大小变为λ倍。

①  Av = λv 

变换一下:

②  (A - λI)v = 0

对于A向量,特征向量存在非零解的充要条件是下面的行列式值为0:

det(A - λI) = 0

计算出特征值λ。

λ可能有多个值,分别将每个值代入公式②,计算向量v,v是个表达式,也就是可以是多个向量。

向量v只会被伸缩而不会改变方向。代入任意一个值,得到一个特征值λ的特征向量v。

  • 特征值性质:

        特征值λ相加 = 矩阵迹相加

        特征值λ相乘 = 矩阵的行列式

A矩阵的特征值分解:
A = W\Sigma W^{-1}

其中W为特征向量组成的矩阵,Σ为对应特征值组成的对角矩阵

W^{-1}AW = \Sigma


奇异值分解 SVD

任意一个形状的矩阵M,可以分解成如下的形式:

        M = U\Sigma V^{T}

  • M 的形状为m*n,U的形状为m*m的方阵,V为n*n的方阵,Σ为m*n形状矩阵。
  • U 是 MM^{T}得到的结果矩阵的特征向量组成的m*m的方阵
  • Σ对角为奇异值,该值的平方等于特征值,而且依次从大到小排列。
  • V 是  M^{T}M得到的结果矩阵的特征向量组成的n*n的方阵,公式用的是其转置,numpy中提供的函数:np.linalg.svd(),给出的结果也是转置后的结果。
    V^{T}也是PCA主成分的方向。
  • U和V都是酉矩阵,即满足:AA^{T} = I

求解步骤:


主成分分析 PCA

主成分可以看作是数据的新坐标系中的基向量,将原始数据投影到这些主成分上,可以实现数据降维。

步骤:

  1. 将原点放到数据的中心位置。
  2. 找到方差最大的方向

也就是:先将坐标轴的原点移动到数据的中心,再将坐标系旋转到方差最大的方向。这样大多数数据被压缩到一个低维度的X轴上。

关键步骤是找到方差最大的方向。而其结果刚好就是SVD分解的V^{T}

假设手里的数据是D',符合正态分布的白数据是D(图例在下面有)。

D变换到D'的过程相当于:先拉伸S,再旋转R

D' = RSD

 其中R就是我们要找的旋转方向。

先对数据D'进行SVD分解:

D' = U\Sigma V^{T}

其中V值是D'^{T}D'得到的结果矩阵的特征向量组成的n*n的方阵

V^{T} 就是 (D'^{T}D')^{T} = D'D'^{T}得到的结果矩阵的特征向量组成的n*n的方阵

记住V^{T}这个结果,后面会用到它。

手上的数据D'的协方差是:

                C' = \frac{1}{n-1}D'D'^{T}

进行下面的推导:

 经过上面的推导,总结如下:

C = \frac{1}{n-1}D'D'^{T} = R\Sigma R^{-1}

因为A矩阵的特征值分解:A = W\Sigma W^{-1}

所以C的特征分解,也就是D'D'^{T}的特征分解后的W值就是上面的旋转矩阵R,就是对D'进行SVD分解后的V^{T}

L值为特征值组成的矩阵,为S矩阵在两个方向拉伸倍数的平方,为旋转后的坐标系下,数据的方差。此时在该坐标系下方差最小。

### 移动最小二乘法用于点云平滑 #### 方法概述 移动最小二乘法(MLS, Moving Least Squares)是一种强大的工具,能够有效地对离散的数据集进行平滑处理。该方法通过局部多项式拟合来近似原始数据,在保持整体形状的同时减少噪声的影响。 对于点云数据而言,每一个待处理的目标点周围选取一定数量的邻域点作为支撑区域,并在此区域内构建加权最小二乘模型以求得最优解。权重函数通常采用高斯核或其他形式的距离衰减函数,使得越靠近目标点的位置具有更高的影响力[^1]。 #### 实现步骤说明 为了实现基于MLS算法的点云平滑操作,具体过程如下: - **输入准备**:读取并加载需要被平滑化的三维点云文件; - **参数设定**:定义搜索半径r以及多项式的阶数n;一般情况下可以选择二次项(n=2),这已经足以应对大多数实际应用场景中的曲面特征描述需求; - **邻居查找**:针对每个顶点vi寻找其球形邻域内的所有其他点vj构成集合Ni={v_j | d(vi,vj)<r}; - **计算权重矩阵Wij**:依据距离di,j=(xi-xj)^2+(yi-yj)^2+(zi-zj)^2建立相应的Gaussian Kernel Wij=exp(-di,j/h^2),其中h代表带宽参数控制着影响范围; - **优化求解**:利用上述得到的信息构造出局部坐标系下的超定方程组Ax=b并通过SVD分解等方式得出最终的结果向量x*; - **更新位置**:根据新的估计值调整原有点位至更合理的地方完成一次迭代循环直至满足收敛条件为止。 以下是Python环境下使用`open3d`库的一个简单例子展示如何应用此技术来进行基本的操作: ```python import open3d as o3d import numpy as np def mls_smoothing(pcd, radius_search=0.05, degree=2): """Apply MLS smoothing on a given point cloud.""" # Convert Open3D PointCloud to Numpy array for easier manipulation points = np.asarray(pcd.points) smoothed_points = [] tree = o3d.geometry.KDTreeFlann(pcd) for i in range(len(points)): [k, idx, _] = tree.search_radius_vector_3d(points[i], radius_search) if k >= 3: # Ensure enough neighbors are found neighborhood = points[idx] A = [] b = [] for pt in neighborhood: diff = pt - points[i] weight = np.exp(-(np.linalg.norm(diff)**2)/(radius_search**2)) row = [weight * (diff[0]**m * diff[1]**(degree-m)) for m in range(degree+1)] A.append(row) b.append(weight * pt) try: solution = np.linalg.lstsq(A, b)[0].reshape((-1,)) smoothed_point = sum([solution[j]*neighborhood[j] for j in range(k)]) / sum(solution[:k]) smoothed_points.append(smoothed_point.tolist()) except Exception as e: print(f"Error occurred during processing index {i}: ", str(e)) smoothed_points.append(points[i]) else: smoothed_points.append(points[i]) pcd_smoothed = o3d.geometry.PointCloud() pcd_smoothed.points = o3d.utility.Vector3dVector(np.array(smoothed_points)) return pcd_smoothed if __name__ == "__main__": input_ply_file = "path_to_your_point_cloud.ply" output_ply_file = "smoothed_output.ply" ply_data = o3d.io.read_point_cloud(input_ply_file) result = mls_smoothing(ply_data) o3d.visualization.draw_geometries([result]) o3d.io.write_point_cloud(output_ply_file, result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laocui1

你的鼓励是我创作的最大动了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值