特征提取之PCA
来源:互联网 发布:上海知凡商贸有限公司 编辑:程序博客网 时间:2024/06/05 16:36
PCA 算法也叫主成分分析(principal components analysis),主要是用于数据降维的。
为什么要进行数据降维?因为实际情况中我们的训练数据会存在特征过多或者是特征累赘的问题,比如:
PCA算法就是用来解决这种问题的,其核心思想就是将 n 维特征映射到 k 维上(k < n),这 k 维是全新的正交特征。我们将这 k 维成为主元,是重新构造出来的 k 维特征,而不是简单地从 n 维特征中取出其余 n-k 维特征。
PCA原理
关于为什么协方差的特征向量就是 k 维理想特征,有3个理论,分别是:
- 最大方差理论
- 最小错误理论
- 坐标轴相关度理论
最大方差理论
信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。因此我们认为,最好的 k 为特征既是将 n 维样本点转换为 k 维后,每一维上的样本方差都很大
PCA 处理图解如下:
降维转换后:
上图中的直线就是我们选取的特征向量,上面实例中PCA的过程就是将空间的2维的点投影到直线上。
那么问题来了,两幅图都是PCA的结果,哪一幅图比较好呢?
根据最大方差理论,答案是左边的图,其实也就是样本投影后间隔较大,容易区分。
其实从另一个角度看,左边的图每个点直线上的距离绝对值之和比右边的每个点到直线距离绝对值之和小,是不是有点曲线回归的感觉?其实从这个角度看,这就是最小误差理论:选择投影后误差最小的直线。
再回到上面的左图,也就是我们要求的最佳的 u ,前面说了,最佳的 u 也就是最佳的曲线,它能够使投影后的样本方差最大或者是误差最小。
另外,由于我们前面PCA算法第一步的时候已经执行对样本数据的每一维求均值,并让每个数据减去均值的预处理了,所以每个特征现在的均值都为0,投影到特征向量上后,均值也为0.因此方差为:
最后的等式中中间的那部分其实就是样本方差的协方差矩阵(xi 的均值为 0)
由于 u 是单位向量,得到
上式两边痛乘以 u,得到:
于是我们得到
最佳投影直线就是特征值 λ 最大是对应的特征向量,其次是 λ 第二大对应的特征向量(求解的到的特征向量都是正交的)。其中 λ 就是我们的方差,也对应了我们前面的最大方差理论,也就是找到能够使投影后方差最大的直线。
PCA 的计算过程
第一步:分别求 x 和 y 的平均值,然后对所有的样例都减去对应的均值
注意,此时我们一般应该在对特征进行方差归一化,目的是让每个特征的权重都一样
第二步:求特征协方差矩阵
公式如下:
第四步:将特征值从大到小进行排序,选择其中最大的 k 个,然后将其对应的 k 个特征向量分别作为列向量组成特征矩阵
第五步: 将样本点投影到选取的特征向量上
e.g.假设样本列数为 m ,特征数为 n ,减去均值后的样本矩阵为 DataAdjust(m*n),协方差矩阵为 n*n ,选取 k 个特征向量组成后的矩阵为 EigenVectors(n*k),则投影后的数据 FinalData 为:
FinalData (m*k) = DataAdjust(m*n) X EigenVectors(n*k)
Python代码实现
PCA算法源码
(1)零均值化
(2)求协方差矩阵
numpy中的cov函数用于求协方差矩阵,参数rowvar很重要!若rowvar=0,说明传入的数据一行代表一个样本,若非0,说明传入的数据一列代表一个样本。因为newData每一行代表一个样本,所以将rowvar设置为0。
(3)求特征值、特征矩阵
(4)保留主要的成分[即保留值比较大的前n个特征]
代码中有几点要说明一下,首先argsort对特征值是从小到大排序的,那么最大的n个特征值就排在后面,所以eigValIndice[-1:-(n+1):-1]就取出这个n个特征值对应的下标。【python里面,list[a:b:c]代表从下标a开始到b,步长为c。】
- 特征提取之PCA
- 图像特征提取之--PCA方法
- 图像特征提取系列之PCA
- PCA-特征提取
- 图像特征提取之(一) --- 主成份分析(PCA)
- SparkML之特征提取(一)主成分分析(PCA)
- 基于PCA的特征提取
- 基于PCA的特征提取
- PCA提取特征脸(vs2013+opencv249)
- 基于ORL人脸库PCA特征提取之“基于主分量人脸重建”
- 特征选择和特征提取区别 、PCA VS LDA
- 特征提取之Haar特征
- 特征选择之PCA变换
- 特征提取之LBP
- 特征提取方法 SIFT,PCA-SIFT,GLOH,SURF
- 特征提取方法 SIFT,PCA-SIFT,GLOH,SURF
- 特征提取方法 SIFT,PCA-SIFT,GLOH,SURF
- 基于PCA的人脸特征提取1
- mt-search的使用及事件捕获(vue.js)
- Unity -- BuildPipeline 编译管线
- qt 环境变量 linux
- MySQL常见错误分析与解决方法总结
- linux下Epoll模式
- 特征提取之PCA
- js对springMVc跨域问题
- wxs 注释
- Html2Image (JAVA)
- ARM Linux 3.x 的设备树(Device Tree)之DTB、DTS
- 面经2
- 中科院分词ICTCLAS5.0_JNI 使用方法
- 设计模式2-抽象工厂
- JAVA多线程和并发基础面试问答