PCA和SVD

总结一下 PCA 的算法步骤:

设有 m 条 n 维数据。

  1. 将原始数据按列组成 n 行 m 列矩阵 X;
  2. 将 X 的每一行进行零均值化,即减去这一行的均值;
  3. 求出协方差矩阵
  4. 求出协方差矩阵的特征值及对应的特征向量;
  5. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k 行组成矩阵 P;
  6. 即为降维到 k 维后的数据。

def PCA(data, correlation=False, sort=True):
    # 屏蔽开始
    data_mean = np.mean(data,axis=0)
    # 归一化
    normalize_data =data -data_mean
    # SVD分解
    H = np.dot(normalize_data,normalize_data.T)
    # u:At*A的特征向量 s:At*A和A*At的特征值 v:A*At的特征向量
    eigenvectors,eigenvalues,eigenvectors_t = np.linalg.svd(H)
    print()
    # 屏蔽结束
    # 排序
    if sort:
        sort = eigenvalues.argsort()[::-1]
        eigenvalues = eigenvalues[sort]
        eigenvectors = eigenvectors[:, sort]

    return eigenvalues, eigenvectors
# 加载原始点云
point_cloud_pynt = PyntCloud.from_file("table_scene_lms400.pcd")
point_cloud_o3d = point_cloud_pynt.to_instance("open3d", mesh=False)
# o3d.visualization.draw_geometries([point_cloud_o3d]) # 显示原始点云

# 从点云中获取点,只对点进行处理
points = point_cloud_pynt.points
print('-------total points number is:', points.shape[0])

# 用PCA分析点云主方向
w, u = PCA(points)
point_cloud_vector = u[:,0:2] #点云主方向对应的向量
sampling_point=np.dot(point_cloud_vector,points)
print(sampling_point)

转载:pca降维

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值