栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

PCA算法(python版本)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PCA算法(python版本)

PCA算法 python版本
  • 原理
  • 算法流程
  • 特性
  • PCA求主方向python代码
  • 法向量python,使用sklearn建树
  • PCA算法的局限
  • PCA算法应用:

原理

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
法向量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)
PCA算法的局限
  1. 如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高;

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

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

PCA算法应用:
  1. 高维数据集的探索与可视化。
  2. 数据压缩。
  3. 数据预处理。
  4. 图象、语音、通信的分析处理。
  5. 降维(最主要),去除数据冗余与噪声。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号