MATLAB pca函数使用指南

转自:https://blog.csdn.net/qq_25800311/article/details/83385029

matlab 自带函数pca的用法
     因为pca在各个学科都有使用,每个学科对于名词的叫法都不太一样,使用的目的都不太一样,我就是单纯的想使用降维,发现matlab函数的pca函数的输入参数除了数据集X还有10个....弄了一段时间才明白....这里分享一下.有错误和不清楚的还请大家指正

数据集X(每行为一个样本,行数为样本数)
- coeff = pca(X)
- coeff = pca(X,Name,Value)
- [coeff,score,latent] = pca(___)
- [coeff,score,latent,tsquared] = pca(___)
- [coeff,score,latent,tsquared,explained,mu] = pca(___)
i.e 

Input Argument 0
X :--数据集 假设n个样本, 每个样本p维,则 X是n-by-p的matrix

Input Argument 1
'Algorithm' — Principal component algorithm
'svd' (default) | 'eig' | 'als'
解释:PCA 涉及到求协方差矩阵的特征向量, 在matlab 有3中算法
默认 :SVD,
eig (Eigenvalue decomposition )算法, 此算法当n(number of examples) > p (features) 时,速度快于SVD,但是计算的结果没有SVD精确
als( Alternating least squares )算法,此算法为了处理数据集X中有少许缺失数据时的情况(i.e 0), 但是对于X为稀疏数据集(缺失数据过多)时,不好用

Input Argument 2
'Centered' — Indicator for centering columns
true (default) | false
解释:选择是否对数据进行中心化, 也是数据的特征是否进行零均值化(i.e.按列减去均值, 为了得到covariance            
        matrix), 如果选择了true,  则可用score*coeff'恢复中心化后的X, 若选择了false,则可用score*coeff'
        恢复原始的X

默认:true(中心化)

Input Argument 3
'Economy' — Indicator for economy size output
true (default) | false
解释: 有时候输出的coeff(映射矩阵p-by-p)过大, 而且是没有必要的(因为我们要降维),所以可以只输出coeff(以及score,latent)的前d列,
d是数据集的自由度,数据集没NAN的时候d=n-1; 具体的解释见matlab.总之如果将看见完整的PCA结果,可以设置为false.
默认:true ,(默认ture以后对于初次使用matlab这个函数的人非常迷惑).

Input Argument 4
'NumComponents' — Number of components requested
number of variables (default) | scalar integer
解释:输出指定的components 也就是更为灵活的Economy,但是经过试验发现指定成分数 仅在小于d(自由度)时有效,大于d时无效;
默认: number of variables ( i.e p,特征数目)

Input Argument 5
'Rows' — Action to take for NaN values
'complete' (default) | 'pairwise' | 'all'
解释: 此选项是为了智能处理数据集X中含有NAN的情况,
          complete: 计算之前.移除X中含有NAN的行(i.e 样本),计算完成后,含有NAN的行被重新插入到
                     score and tsquared相应的位置中(coeff呢?)
  pairwise :      首先这个选项必须配合 'Argorithm'中 'eig'进行使用.如果没有指定'eig'(默认svd),
                   当指定pairwise时,则会自动切换为eig; 指定为svd,则会发送warning message,
                   然后自动切换为eig;若指定为als, 则会发送warning message然后忽略 'Rows'此选项.
                        成功使用此选项时,若计算协方差(i,j)处值时遇到NAN,则使用X中第i或j列中不含NAN
                   的行此处来计算的协方差值.
    all : 当确定X中无缺失数据,使用'all',则pca会使用X中所有的数据,当遇到NAN时则会自动终止.
默认:complete

Input Argument 6
'Weights' — Observation weights
ones (default) | row vector
解释: 基于observations(i.e 样本)的权重pca,有需求的可以自己查查

Input Argument 7
'VariableWeights' — Variable weights
row vector | 'variance'
解释:基于variables(i.e.features)的权重pca,有需求的自己查
默认: 无默认值, 也就是默认不使用此选项

Input Argument 8
'Coeff0' — Initial value for coefficients
matrix of random values (default) | p-by-k matrix
解释: Initial value for the coefficient matrix coeff, 不是太看的懂,但是要配合'Algorithm'中的
         'als'使用
默认:   p-by-random

Input Argument 9
'Score0' — Initial value for scores
matrix of random values (default) | k-by-m matrix
解释: Initial value for scores matri score.不是太看的懂,但是要配合'Algorithm'中的 'als'使用
默认 : n-by-random

Input Argument 10
'Options' — Options for iterations
structure(此用法是个结构体)
解释:用于迭代的选项,仅配合'Algorithm'中的'als'使用. 因为'als'是使用迭代的方法进行计算的
      对这个不感兴趣, 有兴趣的可以去help一下
          附上help中的使用方法 opt = statset('pca'); opt.MaxIter = 2000; coeff =pca(X,'Options',opt);

Output Argument 1
coeff : 主成分系数 应该就是协方差矩阵的特征向量矩阵(也就是映射矩阵).
           完整输出的情况下是一个p-by-p 的matrix.每一列都是一个特征向量.按对应的特征值
           的大小,从大到小进行排列.
Output Argument 2
score: 进行旋转(也就是利用映射矩阵coeff进行)后的结果i.e. score = X * coeff.  n-by-p matrix
          这里有个坑 如果你使用pca时使用的是默认的中心化(i.e 不对'Centered'设置'false'),
          拿X *coeff 和score对比的时候, 记得把X中心化后再乘以coeff,之后再和score对比....;
          同样如果pca使用的是默认值, 恢复的X = score * coeff' (注意转置)是中心化后的数据

Output Argument 3
latent: 主成分方差 也就是各特征向量对应的特征值,从大到小进行排列

Output Argument 4
tsquared :层次不够 无法解释......

Output Argument 5
explained : 每一个主成分所贡献的比例,可以更直观的选择所需要降维的维数了,不用再用特征值去求了

Output Argument 6
mu: X 按列的均值,当前仅当 'Centered'置于'true'(默认值)时才会返回此变量
 

 


[pc,score,latent,tsquare] = pca(feature);%我们这里需要他的pc和latent值做分析

feature是被降维的特征,每一行是一个特征,列数代表总的特征个数,比如一个图片的HOG特征是96维,总共有8000个HOG特征,那么feature的维度是8000×96,我们的目标就是将其降维(假设将96维降到50维,)那么我们期望的降维后feature就变成了我们需要的feature_after_PCA:8000×50

latent用来计算降维后取多少维度能够达到自己需要的精度, 
通过下面的代码运行结果可以得到取pc中对应每一维度对原始数据的精度:
 

cumsum(latent)./sum(latent)
    0.2763
    0.3954
    0.8765
    0.8854
    0.8931
    0.8995
    0.9055
    0.9111
    0.9808
    0.9819
    0.9828
    0.9838
    0.9846
    0.9854
    0.9862
    0.9869
    0.9876
    0.9883
    0.9999
    1.0000
---------------------

结果应该是有96维,但是太长,这里随机删减了一部分,我们可以看到只去取第一维的话和原始数据的准确度只有27%,很低,取全部的维度最后的精度就是100%,如果我们觉得精度达到90%就能接受的话我们就只需要取精度为90%对应的维度,这里假设第50维的精度是90%. 
因此我们需要取pc中的1:50列来做最后的变换矩阵:
 

tran=pc(:,1:50);

因此我们最终的feature降维后的矩阵feature_after_PCA就通过下式计算:

 
  1. feature= bsxfun(@minus,feature,mean(feature,1));

  2. feature_after_PCA= feature*tran;

至此我们PCA降维完成.这里需要人工介入的地方就是选取多少维度来确定和原始数据的精度问题.

补充:上面计算feature_after_PCA的方法是正确的,但是pca函数其实已经给出了所有的转换后矩阵表示,也就是输出的score项,因此在确定需要降维到50维度以后,只需要取score中对应的列就能得到feature_after_PCA:
 

feature_after_PCA=score(:,1:50);
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
Matlab,可以使用pca函数进行主成分分析。该函数的基本语法是: coeff = pca(X) 其,X是一个n*p的数据矩阵,n代表样本个数,p代表特征维度。函数返回的coeff是一个p*p的系数矩阵,也即特征向量矩阵。coeff的每个列向量代表一个主成分,按照成分方差的降序排列。也就是说,越往前的主成分,成分方差越大,保留的数据信息越多,越有价值。 除了基本语法外,pca函数还支持其他参数和返回值。例如,可以使用以下语法来获取主成分分数、主成分方差和T2统计量: \[coeff, score, latent, tsquared\] = pca(X) 其,score是主成分分数,即数据在各主成分上的坐标;latent是主成分方差;tsquared是T2统计量。 此外,还可以通过设置参数来改变pca函数的行为。例如,可以使用以下语法来指定其他参数: coeff = pca(X, 'Name', Value) 总结起来,使用Matlabpca函数可以进行主成分分析,得到主成分系数矩阵、主成分分数、主成分方差和T2统计量等信息。 #### 引用[.reference_title] - *1* [Matlab特征降维主成分分析(PCA)使用方法(整套流程)](https://blog.csdn.net/weixin_44248258/article/details/122111902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* *4* *5* [【matlabpca函数使用方法](https://blog.csdn.net/Lin__coln/article/details/126767355)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值