如何进行PCA分析?
介绍Matlab中用于PCA分析的函数以及计算方法。
PCA原理
PCA,即主成分分析(Principal Component Analysis),是一种常用的数据分析方法。其主要思想是通过线性变换将高维度数据映射到低维度空间中,使得不同变量之间的相关性变得更小,而同一组数据之间的差异或方差则尽可能地大。具体来说,PCA的目标是找到一组正交基,使得这些基组成的向量能够线性重建整个数据集的方差,且重建方差最大。
在计算过程中,将数据集表示为一个矩阵X(其中每一行代表一个样本数据),并设 X 的维度为n×m,其中 n 为样本数量,m 为特征数。同时,设矩阵U为基向量矩阵,维度为 m×k,其中 k 为映射后的低维度空间的维度。则PCA的目标为:找到 U 使得 X 映射到U空间后能够最大化重建方差,即:
$Var(U^TX)$ 同时,U的基向量必须满足正交性约束,即基向量之间互相垂直。
PCA的基础公式
PCA的基础公式有如下几个:
PCA 变换后的矩阵: Y= XU
PCA 的反变换: X′ = YU′T
基向量矩阵 :U=(u1,u2,…,uk)
样本均值:μ = (1/n) * ∑x
数据归一化: X′= X – μPCA计算过程
PCA的计算过程包括以下几个步骤:
1.数据归一化
由于PCA是一种基于协方差矩阵的线性变换方法,因此必须先将数据归一化处理,具体来说,即针对每一维度数据,将所有样本的数据减去其均值,再除以标准差,即可将所有数据映射到同一区间内,消除量纲的影响。2.求协方差矩阵
对于归一化后的数据X,可以通过计算其协方差矩阵来量化数据之间的相关性。其公式为:$Cov(X) = (1/n)(X‐μ) (X‐μ) ^T$
其中,μ为样本的均值,n为样本数。
3.求协方差矩阵特征值和特征向量
对于协方差矩阵C,可以通过求解其特征值和特征向量来获取数据的主成分。具体来说,对于特征值 λi 和对应的特征向量 ui,有:$(C – λiI)ui = 0$
其中, I 为单位矩阵。将该式变形可得:
$(X‐μ)(X‐μ)Tui = λiui$
上述式子表明,特征值 λi 表示主成分在该方向上的方差,而特征向量 ui 表示该主成分在原始数据空间中的方向。
4.筛选主成分,确定低维空间
根据特征值的大小和其对应的特征向量,可以确定哪些主成分对数据表征更加重要。具体来说,可以以如下两种方式来筛选主成分:– 对特征值进行排序,选取保留主成分的阈值。对于保留主成分数目为k的情况,只需选择前 k 大的特征值对应的特征向量即可。
– 根据主成分的方差累积占比进行筛选。具体来说,设数据的前k个主成分方差累积占比为p,即$p = (λ1+λ2+…+λk)/(λ1+λ2+…+λm)$
则选择k的值,以保证p达到预设的阈值即可。
5. 进行线性变换
确定保留的主成分后,将它们组成新的基向量矩阵U,即可将原数据X映射到低维度空间中。映射后的矩阵为:Y = XU
其中,Y的维度为n×k,即每个样本被映射到了k维空间中。
PCA在Matlab中的实现
在Matlab中,可以使用princomp函数来实现PCA分析。该函数的基本用法如下:
1.输入参数
princomp(X): X为计算PCA的数据。若X为 m*n 的矩阵,则表示有m个样本,每个样本有n个特征。若 X 给定,则可以省略第二个参数。2.输出参数
[COEFF,~,LATENT,~] = princomp(X): COEFF 为主成分对应的主向量矩阵,其中第k列即为第k个主成分对应的特征向量;LATENT 为各个主成分对应的特征值(按照从大到小排序);3.可选参数
princomp(X,’econ’): 在n>>m时,可以使用该参数来进行经济型奇异值分解,节约计算时间;4.示例代码:
“` matlab
% 加载数据
load fisheriris
X = meas;% 数据归一化
X0 = (X – repmat(mean(X),size(X,1),1))./repmat(std(X),size(X,1),1);% 计算主成分
[coeff,score,latent] = princomp(X0);% 可视化结果
figure; hold on;
gscatter(score(:,1),score(:,2),species);
xlabel(‘PC1’);ylabel(‘PC2’);
title(‘PCA analysis of fisheriris data’);
“`综上,在进行PCA分析时,需要先处理好原始数据,然后计算其协方差矩阵,再求解特征向量和特征值,最后筛选出主成分并进行线性变换。Matlab中的princomp函数可以进行快捷的计算,并输出主向量矩阵COEFF和主成分对应的特征值。
2023年05月22日 09:36