当前位置:   article > 正文

PCA算法(python版本)_pca python

pca python

原理

PCA算法,全程主成分分析法,是一种非监督的算法;主要用于数据的姜维,通过将为可以用较为简单的特征来代替原来的特征,在分类任务中可以使用PCA算法进行特征降维,然后减小计算量;

算法流程

在这里插入图片描述

特性

  1. 得到的奇异值分解的结果中,最大特征值对应的特征向量就是PCA得到的主方向,而且将所有的点映射到这个向量上得到到映射后的新点集方差最大,所以主方向可以最大程度保留数据的原始特性;

  2. 最小特征值对应的特征向量为法向量方向,法向量的起点为用于求奇异值分解点集的中心点;且法向量越大的点处曲率越小

3) 在求某点法向量的时候,需要确定该点的邻域半径,然后使用邻域内的点组成的点集来计算法法向量;半径选择太大,会受到不相关部分影响,导致法向量平滑;半径过小会容易受到噪声影响;半径不仅可以使用欧式空间邻域,同样可以使用其他尺度的邻域,包括反射率邻域,颜色邻域等;

PCA求主方向python代码

import numpy as np
def PCA(data):
    data_col = np.mean(data,axis = 0)
    data = data - data_col
    B = np.dot(data.T,data)#计算协方差矩阵
    eigenvectors,eigenvalues, v = np.linalg.svd(B)#计算协方差矩阵的特征值和特征向量
    sort = eigenvalues.argsort() #argsort返回列表从大到小排序之后在原始列表中的位置
    eigenvalues = eigenvalues[sort]
    eigenvectors = eigenvectors[:, sort]
    return  eigenvectors
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

法向量python,使用sklearn建树

def get_normals():
    normals = []
    radius = 0.05
    leaf_size = 5  
    tree = KDTree(points,leaf_size)
    near_point_idx = tree.query_radius(points,radius)#每一点的邻居点索引,包含自身点
    
    for i in range(points.shape[0]):
        point_near = points[near_point_idx[i]] #某一点的邻居点,
        v = PCA(point_near)
        normal = v[:,2]
        normals.append(normal)
    normals = np.asarray(normals)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

PCA算法的局限

  1. 如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高;

  2. 特征值分解有一些局限性,比如变换的矩阵必须是方阵;

  3. 在非高斯分布情况下,PCA方法得出的主元可能并不是最优的。

PCA算法应用:

  1. 高维数据集的探索与可视化。
  2. 数据压缩。
  3. 数据预处理。
  4. 图象、语音、通信的分析处理。
  5. 降维(最主要),去除数据冗余与噪声。
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/127172
推荐阅读
相关标签
  

闽ICP备14008679号