PCA原理以及算法实现
来源:互联网 发布:lg v20 跳过网络验证 编辑:程序博客网 时间:2024/06/10 09:05
一.算法介绍
PCA(Princiapal Component Analysis),主成分分析,是统计数据分析、特征提取和数据压缩的经典方法,起源于Pearson的早期工作。实际上,PCA主要作用就是将一个存在信息冗余的多维空间变成一个无信息冗余的较低维空间,是一种通用的降维方法。
举个例子,从一幅数字图像中取出一个8x8的像素窗口,首先通过逐行扫描,变换到向量
二.算法原理
假设向量
我们想要求得这样的一个m*n的
这里,我们需要考虑的是怎样的映射才是符合优化要求的,我们知道向量
那么y的协方差矩阵D为,
我们可以发现,除了对角线上的元素,其余元素皆为两两维度的协方差,这里我们考虑的是,
实际上就是将y的协方差矩阵进行对角化,就可以求出我们想要的w了。
其中,C是X的协方差矩阵,我们将矩阵D对角化,这里使用了线性代数的特征向量的知识,我们知道满足矩阵D对角化的w需满足,
基于矩阵的基础知识,我们知道矩阵
这里我们取前m个特征值所对应的特征向量,构成矩阵w
最后,我们通过
三、算法描述以及代码实现
算法的伪代码如下:
- 去除平均值
- 计算协方差矩阵
- 计算协方差矩阵的特征值和特征向量
- 将特征值从大到小排序
- 保留特征值较大的M个向量
- 将数据转映射到上述的M个向量构建的新空间中
这里,使用python以及numpy库来实现,
from numpy import *def PCA(data,N) #(1)去掉平均值 meanValues=mean(data,axis=0) removedVals=data-meanValues #(2)计算协方差矩阵 covMat=cov(removedVals,rowvar=0) #(3)计算协方差矩阵的特征值和特征向量 speVals,speVects=linalg.eig(mat(covMat)) #(4)将特征值从大到小排序,取前N个 speValsIndex=argsort(speVals) speValsIndex=speVals[:N+1:-1] #(5)保留特征值较大的N个向量 remainVects=specVects[:,speValsIndex] #(6)将数据映射到新空间上 lowDimData=removedVals*remainVects return lowDimData
四.感悟与不足
这里的原理介绍,数学上还很不严密,感兴趣的朋友可以自己认真推导一遍,其中主要涉及到两个问题:
- 怎样的基变换才能保证数据的压缩是可靠?
- 协方差矩阵对角化的意义是什么?
这里仅仅是个人理解,如果有不足之处,还望指正。
五.参考资料
1.Aapo Hyvarinen等,独立成分分析》,周宗潭 翻译,电子工业出版社
2.Peter Harrington,《机器学习实战》,李锐 等翻译 ,人民邮电出版社
3.张贤达,《矩阵分析与应用》,清华大学出版社
0 0
- PCA原理以及算法实现
- PCA算法的原理以及c++实现(Eigen库实现)源码
- PCA降维算法总结以及matlab实现PCA
- PCA降维算法总结以及matlab实现PCA
- PCA数学原理及算法实现
- PCA算法原理简介
- PCA算法原理简介
- PCA算法原理简介
- PCA 算法 原理解析
- PCA算法原理
- PCA算法原理
- PCA算法原理介绍
- PCA原理及实现
- PCA原理及实现
- PCA算法人脸识别小结--原理到实现
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- 食物链-并查集
- [Android]可缩放性ImageView(可以放大缩小)
- NSArray / NSMutableArray
- oracle里面base64加解密
- LeetCode219——Contains Duplicate II
- PCA原理以及算法实现
- SQL Server 触发器
- ftp 限定用户不可以离开主目录
- NSMutableArray(可变数组)
- RF 缩写,方便以后查找
- 使用命令npm install -g hexo-cli 安装Hexo报错问题
- EL和OGNL (转)
- NSDictionary /NSMutableDictionary
- redis3.0.3集群安装详细步骤