PCA:matlab主成份分析
来源:互联网 发布:沉默的羔羊 知乎 编辑:程序博客网 时间:2024/04/27 20:15
通常对于高维数据需要进行降维,matlab中有pca进行数据分析,进行主成份分析:principal component analysis。
matlab调用PCA的方式如下:
XMean = mean(X);%X每行是一个实例,每列代表一个属性X = bsxfun(@minus,X,XMean);%去中心[eigenVectors,scores,eigenValues] = pca(X);transMatrix = eigenVectors(:,1:K);X = X*transMatrix;
第一步是对求训练集数据的均值;X代表原始的数据矩阵,是一个N*d的矩阵,N代表样本个数,d代表特征的原始维数;
第二步是对训练集去中心化;
第三步是pca分析:eigenVectors是一个d*d的矩阵,每列代表对应特征值的特征向量,scores是N*d的矩阵,eigenValues是对应的特征值向量,与eigenVectors的列相对应。
第四步取特征向量矩阵的前K列作为变换矩阵
第五步是对数据进行变化,降维。
**如果数据既有训练集又有测试集,一般先对训练集进行PCA降维,得到相应的transMatrix;
然后在测试集上减去训练样本的均值trainMean,然后乘以变换矩阵得到对应的降维后的测试集;**
代码如下:
XMean = mean(X);%训练样本中心点 X = bsxfun(@minus,X,XMean);%训练样本减去训练样本中心点 transMatrix = eigenVectors(:,1:K); X = X*transMatrix;%训练集降维后的数据 X_ = bsxfun(@minus,X_,XMean);%测试样本减去训练样本中心点 X_ = X_*transMatrix;%测试样本降维后的结果
K的值与选取的子空间最后能多大程度表示原空间有关,它的计算方式为:
sum(eigenValues(1:K))/sum(eigenValues);
一般情况下这个值要大于95%较为合理。
另:
通常如果数据集很大我们需要降维的情况下,一次性读入所有的训练集可能导致内存溢出的问题,此时是否就不能用PCA对数据进行分析呢?并不是这样,如果我们自己实现PCA会发现每次将一个个的样本读入内存也可以完成PCA对整个数据集的分析,下面主要讲这个流程:
1)计算所有样本的均值:这个过程可以通过逐步加和实现,所以每次读入一个样本是没有问题的;
2)计算协方差矩阵,这个也可以通过每个样本加和实现,所以也可以读入一个样本;
3)对协方差矩阵进行奇异值分解;
4)根据特征向量求变换矩阵;
5)对每个样本根据变换矩阵求得变换后的结果。
- PCA:matlab主成份分析
- PCA(主成份分析)
- 主成份分析(PCA)详解
- [图像] PCA主成份分析
- 主成份分析(PCA)详解
- PCA-主成份分析实现流程
- PCA主成份分析(Spark 2.0)
- 机器学习--PCA主成份分析
- 【Machine Learning】笔记:主成份分析 PCA
- 核主成份分析的MatLab实现
- PCA(主成份分析法)技术及其Python实现
- 图像特征提取之(一) --- 主成份分析(PCA)
- 主成份分析(PCA)最详细和全面的诠释
- PCA算法(Principal Components Analysis,主成份分析)
- PCA(主成份分析)理论部分(一)
- 主成份分析(PCA)——原理、实现步骤
- 由Batch Normalization引发的深入浅出PCA主成份分析
- PCA(主成份分析),计算物体旋转角度
- ROS Native Compilation
- App架构设计经验谈:数据层的设计
- hibernate------hql总结
- eclipse 默认UTF-8 -Dfile.encoding=UTF-8
- QTableView 一个单元格中添加按钮
- PCA:matlab主成份分析
- 根据ip地址和子网掩码计算网络地址
- 常用代码备份--多线程
- Linux下批量删除空文件
- 几种设计模式 (WPF MVP MVVM )
- ios 绘图处理
- 原创翻译:James Whittaker系列——10分钟测试计划
- Tomcat – java.lang.OutOfMemoryError: PermGen space Cause and Solution
- phpstorm的第一个程序:helloworld